Skip to content

Commit 02fed48

Browse files
committed
Merge branch 'master' into release
2 parents 6ae2654 + 9ab44a9 commit 02fed48

File tree

106 files changed

+1001
-519
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

106 files changed

+1001
-519
lines changed

.github/pull_request_template.md

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11
## Description
2-
*Enter description to help the reviewer understand what's the change about...*
2+
<!--
3+
Enter description to help the reviewer understand what's the change about...
4+
-->
35

46
## Changelog
5-
*Add a quick message for our users about this change (include Component name, relevant props and general purpose of the PR)*
7+
<!--
8+
Add a quick message for our users about this change (include Component name, relevant props and general purpose of the PR)
9+
-->
10+
11+
## Additional info
12+
<!--
13+
If applicable, add additional info such as link to the bug being fixed by this PR etc
14+
-->

.npmignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,8 @@ markdowns/
240240
.babelrc
241241
# typings/
242242
# eslint-rules/
243-
scripts/
243+
scripts/*
244+
!scripts/prReleaseNotesCommon.ts
244245
demo-app.component.js
245246
index.android.js
246247
index.ios.js

demo/src/screens/__tests__/__snapshots__/AvatarScreen.spec.js.snap

+22-6
Original file line numberDiff line numberDiff line change
@@ -3072,19 +3072,35 @@ exports[`AvatarScreen renders screen 1`] = `
30723072
>
30733073
<Text
30743074
allowFontScaling={false}
3075+
fsTagName="unmask"
30753076
numberOfLines={1}
30763077
style={
30773078
[
30783079
{
30793080
"backgroundColor": "transparent",
3080-
"color": "#FFFFFF",
3081-
"fontFamily": "System",
3082-
"fontSize": 12,
3083-
"fontWeight": "700",
3084-
"lineHeight": 16,
3081+
"color": "#20303C",
3082+
"textAlign": "left",
30853083
},
3086-
false,
30873084
undefined,
3085+
undefined,
3086+
undefined,
3087+
undefined,
3088+
undefined,
3089+
undefined,
3090+
undefined,
3091+
undefined,
3092+
[
3093+
{
3094+
"backgroundColor": "transparent",
3095+
"color": "#FFFFFF",
3096+
"fontFamily": "System",
3097+
"fontSize": 12,
3098+
"fontWeight": "700",
3099+
"lineHeight": 16,
3100+
},
3101+
false,
3102+
undefined,
3103+
],
30883104
]
30893105
}
30903106
testID="badge"

demo/src/screens/componentScreens/DateTimePickerScreen.tsx

+49-7
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,23 @@
11
import React, {Component} from 'react';
22
import {ScrollView} from 'react-native';
3-
import {DateTimePicker, DateTimePickerProps, View, Text} from 'react-native-ui-lib'; // eslint-disable-line
3+
import moment from 'moment';
4+
import * as LightDate from 'light-date';
5+
import {DateTimePicker, DateTimePickerProps, DateTimePickerMode, View, Text, Switch} from 'react-native-ui-lib';
6+
7+
interface State {
8+
mode: DateTimePickerMode;
9+
dateTimeFormatter: 'moment' | 'light-date';
10+
}
11+
12+
export default class DateTimePickerScreen extends Component<{}, State> {
13+
constructor(props: any) {
14+
super(props);
15+
this.state = {
16+
mode: 'time',
17+
dateTimeFormatter: 'moment'
18+
};
19+
}
420

5-
export default class DateTimePickerScreen extends Component {
621
getCustomInputValue = (value?: string) => {
722
if (!value) {
823
return 'Default';
@@ -21,7 +36,27 @@ export default class DateTimePickerScreen extends Component {
2136
);
2237
};
2338

39+
toggleTimeOrDate = () => {
40+
this.setState({mode: this.state.mode === 'time' ? 'date' : 'time'});
41+
};
42+
43+
toggleFormatter = () => {
44+
this.setState({dateTimeFormatter: this.state.dateTimeFormatter === 'moment' ? 'light-date' : 'moment'});
45+
};
46+
47+
getFormatter = (): DateTimePickerProps['dateTimeFormatter'] => {
48+
const {dateTimeFormatter} = this.state;
49+
if (dateTimeFormatter === 'moment') {
50+
return (value: Date, mode: DateTimePickerMode) =>
51+
moment(value).format(mode === 'date' ? 'MMM D, YYYY' : 'h:mm A');
52+
} else {
53+
return (value: Date, mode: DateTimePickerMode) =>
54+
LightDate.format(value, mode === 'date' ? '{mm}-{dd}-{yyyy}' : '{HH}:{mm}');
55+
}
56+
};
57+
2458
render() {
59+
const {mode, dateTimeFormatter} = this.state;
2560
return (
2661
<ScrollView>
2762
<View padding-page>
@@ -31,15 +66,13 @@ export default class DateTimePickerScreen extends Component {
3166
containerStyle={{marginVertical: 20}}
3267
label={'Date'}
3368
placeholder={'Select a date'}
34-
// dateFormat={'MMM D, YYYY'}
3569
// value={new Date('October 13, 2014')}
3670
/>
3771
<DateTimePicker
3872
migrateTextField
3973
mode={'time'}
4074
label={'Time'}
4175
placeholder={'Select time'}
42-
// timeFormat={'h:mm A'}
4376
// value={new Date('2015-03-25T12:00:00-06:30')}
4477
/>
4578

@@ -64,13 +97,22 @@ export default class DateTimePickerScreen extends Component {
6497
<Text text60R marginT-40>
6598
Custom Input
6699
</Text>
100+
<View row marginV-20 centerV spread>
101+
<View row>
102+
<Text text80>{mode}</Text>
103+
<Switch value={mode === 'time'} onValueChange={this.toggleTimeOrDate} marginL-10/>
104+
</View>
105+
<View row>
106+
<Text text80>{dateTimeFormatter}</Text>
107+
<Switch value={dateTimeFormatter === 'moment'} onValueChange={this.toggleFormatter} marginL-10/>
108+
</View>
109+
</View>
67110
<DateTimePicker
68111
migrateTextField
69112
containerStyle={{marginVertical: 20}}
70-
label={'Date'}
71-
placeholder={'Select a date'}
72113
renderInput={this.renderCustomInput}
73-
dateFormat={'MMM D, YYYY'}
114+
mode={mode}
115+
dateTimeFormatter={this.getFormatter()}
74116
// value={new Date('2015-03-25T12:00:00-06:30')}
75117
/>
76118
</View>

demo/src/screens/incubatorScreens/IncubatorCalendarScreen/index.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,10 @@ export default class CalendarScreen extends Component {
3939
};
4040

4141
render() {
42-
const {date, events, showLoader} = this.state;
42+
const {date, events/* , showLoader */} = this.state;
4343
return (
44-
<Incubator.Calendar data={events} initialDate={date} onChangeDate={this.onChangeDate} staticHeader>
45-
<Incubator.Calendar.Agenda onEndReached={this.onEndReached} showLoader={showLoader}/>
44+
<Incubator.Calendar data={events} initialDate={date} /* onChangeDate={this.onChangeDate} */ staticHeader>
45+
{/* <Incubator.Calendar.Agenda onEndReached={this.onEndReached} showLoader={showLoader}/> */}
4646
</Incubator.Calendar>
4747
);
4848
}

demo/src/screens/incubatorScreens/IncubatorSliderScreen.tsx

-1
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,6 @@ const IncubatorSliderScreen = () => {
111111
<Text margin-10 text70BL $textDefault>
112112
Disabled Slider
113113
</Text>
114-
{/* @ts-expect-error */}
115114
<Incubator.Slider value={0.4} containerStyle={styles.container} disableRTL={disableRTL} disabled/>
116115
</View>
117116
);

package.json

+4-3
Original file line numberDiff line numberDiff line change
@@ -49,10 +49,10 @@
4949
"prop-types": "^15.5.10",
5050
"react-freeze": "^1.0.0",
5151
"react-native-redash": "^12.0.3",
52-
"wix-react-native-text-size": "~1.0.0",
5352
"semver": "^5.5.0",
5453
"tinycolor2": "^1.4.2",
55-
"url-parse": "^1.2.0"
54+
"url-parse": "^1.2.0",
55+
"wix-react-native-text-size": "~1.0.0"
5656
},
5757
"devDependencies": {
5858
"@babel/cli": "^7.16.8",
@@ -66,7 +66,6 @@
6666
"@formatjs/intl-locale": "^3.0.3",
6767
"@formatjs/intl-numberformat": "^8.0.4",
6868
"@formatjs/intl-pluralrules": "^5.0.3",
69-
"react-native-mmkv": "2.6.1",
7069
"@react-native-community/blur": "4.3.0",
7170
"@react-native-community/datetimepicker": "^3.4.6",
7271
"@react-native-community/netinfo": "^5.6.2",
@@ -96,6 +95,7 @@
9695
"eslint-plugin-uilib": "file:./eslint-rules",
9796
"gh-pages": "^1.1.0",
9897
"jest": "^29.2.1",
98+
"light-date": "^1.2.0",
9999
"metro-react-native-babel-preset": "0.73.7",
100100
"mocha": "^5.0.0",
101101
"moment": "^2.24.0",
@@ -110,6 +110,7 @@
110110
"react-native-gesture-handler": "2.9.0",
111111
"react-native-haptic-feedback": "^1.11.0",
112112
"react-native-linear-gradient": "2.6.2",
113+
"react-native-mmkv": "2.6.1",
113114
"react-native-navigation": "7.32.1",
114115
"react-native-reanimated": "3.1.0",
115116
"react-native-shimmer-placeholder": "^2.0.6",

scripts/prReleaseNotes.js

+5-134
Original file line numberDiff line numberDiff line change
@@ -1,136 +1,7 @@
1-
const fs = require('fs');
2-
const _ = require('lodash');
3-
const childProcess = require('child_process');
4-
const fetch = require('node-fetch');
5-
const readline = require('readline');
6-
71
const GITHUB_TOKEN = 'xxxx';
8-
let LATEST_VERSION = '5.14.0';
9-
let NEW_VERSION = '5.15.0';
10-
let releaseNotes;
11-
12-
const rl = readline.createInterface({
13-
input: process.stdin,
14-
output: process.stdout
15-
});
16-
17-
rl.question(`What is the current version? `, currentVersion => {
18-
rl.question('What is the next version for release? ', newVersion => {
19-
LATEST_VERSION = currentVersion;
20-
NEW_VERSION = newVersion;
21-
rl.close();
22-
});
23-
});
24-
25-
rl.on('close', () => {
26-
console.info(`Current latest version is v${LATEST_VERSION}`);
27-
console.info(`Generating release notes out or PRs for v${NEW_VERSION}`);
28-
run();
29-
});
30-
31-
async function run() {
32-
const latestReleaseDate = await fetchLatestReleaseDate(LATEST_VERSION);
33-
const PRs = await fetchMergedPRs(latestReleaseDate);
34-
generateNotes(PRs);
35-
}
36-
37-
async function fetchLatestReleaseDate(version) {
38-
const relesae = childProcess.execSync(`gh release view ${version}`).toString();
39-
const releaseMetaData = relesae.split('--')[0];
40-
const createDate = _.flow(data => _.split(data, '\n'),
41-
linesData => _.find(linesData, l => l.startsWith('created')),
42-
createdData => _.split(createdData, '\t'),
43-
_.last)(releaseMetaData);
44-
45-
return new Date(createDate);
46-
}
47-
48-
async function fetchMergedPRs(postMergedDate) {
49-
const page = 1;
50-
// process.stderr.write(`Loading page ${page}..`);
51-
const url =
52-
'https://api.github.com/repos/wix/react-native-ui-lib/pulls?' +
53-
`state=closed&base=master&page=${page}&per_page=100`;
54-
const headers = {Authorization: `token ${GITHUB_TOKEN}`};
55-
const response = await fetch(url, {headers});
56-
const PRs = await response.json();
57-
58-
const relevantPRs = _.flow(prs => _.filter(prs, pr => !!pr.merged_at && new Date(pr.merged_at) > postMergedDate),
59-
prs => _.sortBy(prs, 'merged_at'),
60-
prs =>
61-
_.map(prs, pr => ({
62-
state: pr.state,
63-
merged_at: pr.merged_at,
64-
html_url: pr.html_url,
65-
branch: pr.head.ref,
66-
number: pr.number,
67-
title: pr.title,
68-
info: parsePR(pr.body)
69-
})))(PRs);
70-
71-
return relevantPRs;
72-
}
73-
74-
function parsePR(prContent) {
75-
const sections = prContent.split('##');
76-
77-
const PRInfo = {};
78-
sections.forEach(section => {
79-
const lines = section.trim().split('\r\n');
80-
const title = lines.splice(0, 1)[0].toLowerCase();
81-
const body = lines.join('\r\n');
82-
if (title && body) {
83-
PRInfo[title] = body;
84-
}
85-
});
86-
87-
return PRInfo;
88-
}
89-
90-
function generateNotes(PRs) {
91-
const features = [],
92-
fixes = [],
93-
infra = [],
94-
others = [];
95-
96-
PRs.forEach(pr => {
97-
if (pr.branch.startsWith('feat/')) {
98-
fixes.push(pr);
99-
} else if (pr.branch.startsWith('fix/')) {
100-
features.push(pr);
101-
} else if (pr.branch.startsWith('infra/')) {
102-
infra.push(pr);
103-
} else {
104-
others.push(pr);
105-
}
106-
});
107-
108-
// features
109-
addTitle(':gift: Features');
110-
features.forEach(addEntry);
111-
// bug fixes
112-
addTitle(':wrench: Fixes');
113-
fixes.forEach(addEntry);
114-
// migrations
115-
addTitle(':bulb: Deprecations & Migrations');
116-
infra.forEach(addEntry);
117-
// Maintenance & Infra
118-
addTitle(':gear: Maintenance & Infra');
119-
// others
120-
addTitle('OTHERS');
121-
others.forEach(addEntry);
122-
123-
fs.writeFileSync(`${process.env.HOME}/Downloads/uilib-release-notes_${NEW_VERSION}.txt`, releaseNotes, {
124-
encoding: 'utf8'
125-
});
126-
127-
console.log(`\x1b[1m\x1b[32m✔\x1b[0m \x1b[32muilib-release-notes.txt was successfully written to ${process.env.HOME}/Downloads\x1b[0m \x1b[1m\x1b[32m✔\x1b[0m`);
128-
}
129-
130-
function addTitle(title) {
131-
releaseNotes += `\n\n${title}\n\n`;
132-
}
2+
const LATEST_VERSION = '7.3.0';
3+
const NEW_VERSION = '7.4.0';
4+
const PREFIX = 'uilib';
5+
const REPO = 'wix/react-native-ui-lib';
1336

134-
function addEntry(pr) {
135-
releaseNotes += `• ${pr.info.changelog || pr.title} (#${pr.number}) \n`;
136-
}
7+
require('./prReleaseNotesCommon').generateReleaseNotes(LATEST_VERSION, NEW_VERSION, GITHUB_TOKEN, PREFIX, REPO);

0 commit comments

Comments
 (0)