Skip to content

Commit e5d0af5

Browse files
Deploy
1 parent a937722 commit e5d0af5

File tree

4 files changed

+212
-65
lines changed

4 files changed

+212
-65
lines changed

.gitignore

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# Xcode
2+
!**/*.xcodeproj
3+
!**/*.pbxproj
4+
!**/*.xcworkspacedata
5+
!**/*.xcsettings
6+
!**/*.xcscheme
7+
*.pbxuser
8+
!default.pbxuser
9+
*.mode1v3
10+
!default.mode1v3
11+
*.mode2v3
12+
!default.mode2v3
13+
*.perspectivev3
14+
!default.perspectivev3
15+
xcuserdata
16+
*.xccheckout
17+
*.moved-aside
18+
DerivedData
19+
*.hmap
20+
*.ipa
21+
*.xcuserstate
22+
project.xcworkspace
23+
24+
# Gradle
25+
/build/
26+
/packages/react-native-codegen/android/build/
27+
/packages/react-native-codegen/android/gradlePlugin-build/gradlePlugin/build
28+
/packages/react-native-gradle-plugin/build/
29+
/packages/rn-tester/android/app/.cxx/
30+
/packages/rn-tester/android/app/build/
31+
/packages/rn-tester/android/app/gradle/
32+
/packages/rn-tester/android/app/gradlew
33+
/packages/rn-tester/android/app/gradlew.bat
34+
/ReactAndroid/build/
35+
/ReactAndroid/gradle/
36+
/ReactAndroid/gradlew
37+
/ReactAndroid/gradlew.bat
38+
39+
# Buck
40+
.buckd
41+
buck-out
42+
/.lsp.buckd
43+
/.lsp-buck-out
44+
/ReactAndroid/src/main/jni/prebuilt/lib/
45+
/ReactAndroid/src/main/gen
46+
47+
# Android Studio
48+
.project
49+
.settings
50+
.classpath
51+
52+
# Watchman
53+
.watchmanconfig
54+
55+
# Android
56+
.idea
57+
.gradle
58+
local.properties
59+
*.iml
60+
/android/
61+
62+
# Node
63+
node_modules
64+
*.log
65+
.nvm
66+
/bots/node_modules/
67+
package-lock.json
68+
69+
# OS X
70+
.DS_Store
71+
72+
# Test generated files
73+
/ReactAndroid/src/androidTest/assets/AndroidTestBundle.js
74+
*.js.meta
75+
76+
/coverage
77+
/third-party
78+
79+
# Root dir shouldn't have Xcode project
80+
/*.xcodeproj
81+
82+
# ReactCommon subdir shouldn't have Xcode project
83+
/ReactCommon/**/*.xcodeproj
84+
/packages/rn-tester/build
85+
/packages/rn-tester/android/app/build/*
86+
87+
# Libs that shouldn't have Xcode project
88+
/Libraries/FBLazyVector/**/*.xcodeproj
89+
/Libraries/RCTRequired/**/*.xcodeproj
90+
/React/CoreModules/**/*.xcodeproj
91+
/React/FBReactNativeSpec/**/*.xcodeproj
92+
/packages/react-native-codegen/**/*.xcodeproj
93+
94+
# CocoaPods
95+
/template/ios/Pods/
96+
/template/ios/Podfile.lock
97+
/packages/rn-tester/Gemfile.lock
98+
99+
# Ignore RNTester specific Pods, but keep the __offline_mirrors__ here.
100+
/packages/rn-tester/Pods/*
101+
!/packages/rn-tester/Pods/__offline_mirrors__
102+
103+
# react-native-codegen
104+
/React/FBReactNativeSpec/FBReactNativeSpec
105+
/packages/react-native-codegen/lib
106+
/ReactCommon/react/renderer/components/rncore/
107+
108+
# Visual studio
109+
.vscode
110+
.vs
111+
112+
# Android memory profiler files
113+
*.hprof

README.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,15 @@ React Native component that lets you select days of the week.
1717

1818
## 🖼 Gallery
1919

20-
![img1](https://github.com/wniemiec-components-reactnative/weekday-selector/blob/master/docs/img/img1.jpg)
20+
<div style="display: flex; flex-direction: row; justify-content: center; align-items: center; flex-wrap: wrap"
21+
<img height=400 src="https://raw.githubusercontent.com/wniemiec-components-reactnative/weekday-selector/master/docs/img/screens/img1.png" alt="image 1" />
2122

22-
![img2](https://github.com/wniemiec-components-reactnative/weekday-selector/blob/master/docs/img/img2.jpg)
23+
<img height=400 src="https://raw.githubusercontent.com/wniemiec-components-reactnative/weekday-selector/master/docs/img/screens/img2.png" alt="image 2" />
2324

24-
![img3](https://github.com/wniemiec-components-reactnative/weekday-selector/blob/master/docs/img/img3.jpg)
25+
<img height=400 src="https://raw.githubusercontent.com/wniemiec-components-reactnative/weekday-selector/master/docs/img/screens/img3.png" alt="image 3" />
26+
27+
<img height=400 src="https://raw.githubusercontent.com/wniemiec-components-reactnative/weekday-selector/master/docs/img/screens/img4.png" alt="image 4" />
28+
</div>
2529

2630
## ❓ How to use
2731
1. Install the component
@@ -55,7 +59,7 @@ function handleWeekDay(weekday, selected) {
5559
|----------------|-------------------------------|-----------------------------|--------|
5660
|onPress |`function(number, bool): void`|Function that is called when a weekday is selected|`null`|
5761
|reduced |`bool`|Indicates whether the days of the week should be displayed in abbreviated form |`false`|
58-
|selectedOps |`array: number`|Pre-selected weekdays |`[]`|
62+
|selectedOps |`array: number`|Pre-selected weekdays (starting with 0) |`[]`|
5963
|bgColor |`string`|Background color (in hexadecimal) |`#01786F`|
6064
|fgColor |`string`|Foreground color (in hexadecimal) |`#FFFFFF`|
6165

package.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
2-
"name": "@wniemiec.component.reactnative/weekday-selector",
3-
"version": "1.0.0",
2+
"name": "@wniemiec-component-reactnative/weekday-selector",
3+
"version": "1.0.1",
44
"description": "Component that lets you select days of the week",
55
"main": "index.js",
66
"repository": {
@@ -21,5 +21,8 @@
2121
"bugs": {
2222
"url": "https://github.com/wniemiec-components-reactnative/weekday-selector/issues"
2323
},
24-
"homepage": "https://github.com/wniemiec-components-reactnative/weekday-selector"
24+
"homepage": "https://github.com/wniemiec-components-reactnative/weekday-selector",
25+
"dependencies": {
26+
"@wniemiec-component-reactnative/selectable-button": "^1.0.0"
27+
}
2528
}

src/WeekdaySelector/index.js

Lines changed: 85 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -8,68 +8,95 @@
88
* @format
99
*/
1010

11-
import React, { useEffect, useState } from 'react'
12-
import { View } from 'react-native'
13-
import styles from './styles'
14-
import FlatButton from '../button/FlatButton';
15-
import { translate } from '../locales';
11+
import React, { useEffect, useState } from 'react';
12+
import { View } from 'react-native';
13+
import styles from './styles';
14+
import SelectableButton from '@wniemiec-component-reactnative/selectable-button';
15+
import { translate } from './locales';
1616

17-
export default function WeekdaySelector({ onPress, reduced, selectedOps }) {
18-
if (reduced === undefined)
19-
reduced = false
17+
/**
18+
* Component that lets you select days of the week.
19+
*
20+
* @param {function(number, bool): void} onPress: Function that is called
21+
* when the button is pressed
22+
* @param {bool} reduced: Indicates whether the days of the week should be
23+
* displayed in abbreviated form
24+
* @param {array: int} selectedOps: Pre-selected weekdays (starting with 0)
25+
* @param {string} bgColor: Background color (in hexadecimal)
26+
* @param {string} fgColor: Foreground color (in hexadecimal)
27+
*/
28+
export default function DaysOfWeek({ onPress, reduced, selectedOps, bgColor = "#01786F", fgColor = "#FFFFFF" }) {
29+
30+
const [selectedOp, setSelectedOp] = useState([]);
31+
const dayWeek = buildDayWeekMapping(reduced);
32+
33+
const handlePress = (op) => {
34+
const selected = !selectedOp.includes(op)
2035

21-
const [selectedOp, setSelectedOp] = useState([])
22-
const dayWeek = [
23-
reduced ? translate('monday') : translate('monday_abbr'),
24-
reduced ? translate('tuesday') : translate('tuesday_abbr'),
25-
reduced ? translate('wednesday') : translate('wednesday_abbr'),
26-
reduced ? translate('thursday') : translate('thursday_abbr'),
27-
reduced ? translate('friday') : translate('friday_abbr'),
28-
reduced ? translate('saturday') : translate('saturday_abbr'),
29-
reduced ? translate('sunday') : translate('sunday_abbr'),
30-
]
36+
if (selectedOp.includes(op)) {
37+
if (selectedOp.length == 1) {
38+
alert(translate('select_at_least_one'));
39+
return;
40+
}
41+
else {
42+
setSelectedOp(list => {
43+
let newList = [...list];
44+
newList = newList.filter((item, index) => item != op);
45+
return newList;
46+
})
47+
}
48+
}
49+
else
50+
setSelectedOp(list => {
51+
const newList = [...list];
52+
newList.push(op);
53+
return newList;
54+
})
3155

32-
useEffect(() => {
33-
if (selectedOps != undefined) {
34-
setSelectedOp(selectedOps)
35-
}
36-
}, [])
56+
onPress(op, selected);
57+
}
3758

38-
function handlePress(op) {
39-
const selected = !selectedOp.includes(op)
59+
const WeekOption = ({weekday}) => (
60+
<SelectableButton
61+
selected={selectedOp.includes(weekday)}
62+
title={dayWeek[weekday]}
63+
onPress={() => handlePress(weekday)}
64+
fgColor={fgColor}
65+
bgColor={bgColor}
66+
size='small'
67+
/>
68+
);
4069

41-
if (selectedOp.includes(op)) {
42-
if (selectedOp.length == 1) {
43-
alert(translate('select_at_least_one'))
44-
return
45-
}
46-
else {
47-
setSelectedOp(list => {
48-
let newList = [...list]
49-
newList = newList.filter((item, index) => item != op)
50-
return newList
51-
})
52-
}
53-
}
54-
else
55-
setSelectedOp(list => {
56-
const newList = [...list]
57-
newList.push(op)
58-
return newList
59-
})
70+
useEffect(() => {
71+
if (selectedOps != undefined) {
72+
setSelectedOp(selectedOps);
73+
}
74+
}, [])
6075

61-
onPress(op, selected)
62-
}
76+
return (
77+
<View style={styles.area}>
78+
<WeekOption weekday={0} />
79+
<WeekOption weekday={1} />
80+
<WeekOption weekday={2} />
81+
<WeekOption weekday={3} />
82+
<WeekOption weekday={4} />
83+
<WeekOption weekday={5} />
84+
<WeekOption weekday={6} />
85+
</View>
86+
)
87+
}
6388

64-
return (
65-
<View style={styles.area}>
66-
<FlatButton selected={selectedOp.includes(1)} title={dayWeek[0]} onPress={() => handlePress(1)} />
67-
<FlatButton selected={selectedOp.includes(2)} title={dayWeek[1]} onPress={() => handlePress(2)} />
68-
<FlatButton selected={selectedOp.includes(3)} title={dayWeek[2]} onPress={() => handlePress(3)} />
69-
<FlatButton selected={selectedOp.includes(4)} title={dayWeek[3]} onPress={() => handlePress(4)} />
70-
<FlatButton selected={selectedOp.includes(5)} title={dayWeek[4]} onPress={() => handlePress(5)} />
71-
<FlatButton selected={selectedOp.includes(6)} title={dayWeek[5]} onPress={() => handlePress(6)} />
72-
<FlatButton selected={selectedOp.includes(0)} title={dayWeek[6]} onPress={() => handlePress(0)} />
73-
</View>
74-
)
75-
}
89+
function buildDayWeekMapping(reduced) {
90+
if (reduced === undefined)
91+
reduced = false;
92+
93+
return [
94+
reduced ? translate('monday') : translate('monday_abbr'),
95+
reduced ? translate('tuesday') : translate('tuesday_abbr'),
96+
reduced ? translate('wednesday') : translate('wednesday_abbr'),
97+
reduced ? translate('thursday') : translate('thursday_abbr'),
98+
reduced ? translate('friday') : translate('friday_abbr'),
99+
reduced ? translate('saturday') : translate('saturday_abbr'),
100+
reduced ? translate('sunday') : translate('sunday_abbr'),
101+
];
102+
}

0 commit comments

Comments
 (0)