@tactics/toddle-styleguide 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/.expo-shared/assets.json +4 -0
  2. package/.github/workflows/run-tests.yml +16 -0
  3. package/.prettierrc.js +9 -0
  4. package/.yarnrc.yml +1 -0
  5. package/App.tsx +221 -0
  6. package/app.json +33 -0
  7. package/assets/adaptive-icon.png +0 -0
  8. package/assets/components/avatar/baby.png +0 -0
  9. package/assets/favicon.png +0 -0
  10. package/assets/fonts/montserrat/bold.ttf +0 -0
  11. package/assets/fonts/montserrat/regular.ttf +0 -0
  12. package/assets/fonts/source-sans-pro/bold.ttf +0 -0
  13. package/assets/fonts/source-sans-pro/regular.ttf +0 -0
  14. package/assets/icon.png +0 -0
  15. package/assets/splash.png +0 -0
  16. package/babel.config.js +6 -0
  17. package/jest.config.js +22 -0
  18. package/package.json +53 -0
  19. package/src/components/atoms/avatar/__snapshots__/avatar.test.js.snap +85 -0
  20. package/src/components/atoms/avatar/avatar.component.tsx +35 -0
  21. package/src/components/atoms/avatar/avatar.preview.tsx +38 -0
  22. package/src/components/atoms/avatar/avatar.styles.js +55 -0
  23. package/src/components/atoms/avatar/avatar.test.js +22 -0
  24. package/src/components/atoms/button/__snapshots__/button.test.js.snap +307 -0
  25. package/src/components/atoms/button/button.component.tsx +27 -0
  26. package/src/components/atoms/button/button.preview.tsx +34 -0
  27. package/src/components/atoms/button/button.styles.js +25 -0
  28. package/src/components/atoms/button/button.test.js +35 -0
  29. package/src/components/atoms/cancel-link/__snapshots__/cancel-link.test.js.snap +89 -0
  30. package/src/components/atoms/cancel-link/cancel-link.component.tsx +24 -0
  31. package/src/components/atoms/cancel-link/cancel-link.preview.tsx +20 -0
  32. package/src/components/atoms/cancel-link/cancel-link.styles.js +20 -0
  33. package/src/components/atoms/cancel-link/cancel-link.test.js +28 -0
  34. package/src/components/atoms/check-switch/__snapshots__/check-switch.test.js.snap +67 -0
  35. package/src/components/atoms/check-switch/check-switch.component.tsx +46 -0
  36. package/src/components/atoms/check-switch/check-switch.preview.tsx +31 -0
  37. package/src/components/atoms/check-switch/check-switch.styles.js +36 -0
  38. package/src/components/atoms/check-switch/check-switch.test.js +13 -0
  39. package/src/components/atoms/checkbox/__snapshots__/checkbox.test.js.snap +120 -0
  40. package/src/components/atoms/checkbox/checkbox.component.tsx +26 -0
  41. package/src/components/atoms/checkbox/checkbox.preview.tsx +46 -0
  42. package/src/components/atoms/checkbox/checkbox.styles.js +35 -0
  43. package/src/components/atoms/checkbox/checkbox.test.js +30 -0
  44. package/src/components/atoms/child-list-item/__snapshots__/child-list-item.test.js.snap +635 -0
  45. package/src/components/atoms/child-list-item/child-list-item.component.tsx +81 -0
  46. package/src/components/atoms/child-list-item/child-list-item.preview.tsx +65 -0
  47. package/src/components/atoms/child-list-item/child-list-item.styles.js +82 -0
  48. package/src/components/atoms/child-list-item/child-list-item.test.js +73 -0
  49. package/src/components/atoms/contact-item/__snapshots__/contact-item.test.js.snap +321 -0
  50. package/src/components/atoms/contact-item/contact-item.component.tsx +61 -0
  51. package/src/components/atoms/contact-item/contact-item.preview.tsx +30 -0
  52. package/src/components/atoms/contact-item/contact-item.styles.js +26 -0
  53. package/src/components/atoms/contact-item/contact-item.test.js +20 -0
  54. package/src/components/atoms/filter-tab/__snapshots__/filter-tab.test.js.snap +415 -0
  55. package/src/components/atoms/filter-tab/filter-tab.component.tsx +93 -0
  56. package/src/components/atoms/filter-tab/filter-tab.preview.tsx +37 -0
  57. package/src/components/atoms/filter-tab/filter-tab.styles.js +64 -0
  58. package/src/components/atoms/filter-tab/filter-tab.test.js +38 -0
  59. package/src/components/atoms/form-actions/__snapshots__/form-action.test.js.snap +176 -0
  60. package/src/components/atoms/form-actions/form-action.component.tsx +25 -0
  61. package/src/components/atoms/form-actions/form-action.preview.tsx +29 -0
  62. package/src/components/atoms/form-actions/form-action.styles.js +19 -0
  63. package/src/components/atoms/form-actions/form-action.test.js +32 -0
  64. package/src/components/atoms/image-bubble/__snapshots__/image-bubble.test.js.snap +67 -0
  65. package/src/components/atoms/image-bubble/image-bubble.component.tsx +25 -0
  66. package/src/components/atoms/image-bubble/image-bubble.preview.tsx +19 -0
  67. package/src/components/atoms/image-bubble/image-bubble.styles.js +31 -0
  68. package/src/components/atoms/image-bubble/image-bubble.test.js +20 -0
  69. package/src/components/atoms/info/__snapshots__/info.test.js.snap +43 -0
  70. package/src/components/atoms/info/info.component.tsx +22 -0
  71. package/src/components/atoms/info/info.preview.tsx +20 -0
  72. package/src/components/atoms/info/info.styles.js +25 -0
  73. package/src/components/atoms/info/info.test.js +18 -0
  74. package/src/components/atoms/pill/__snapshots__/pill.test.js.snap +141 -0
  75. package/src/components/atoms/pill/pill.component.tsx +23 -0
  76. package/src/components/atoms/pill/pill.preview.tsx +21 -0
  77. package/src/components/atoms/pill/pill.styles.js +32 -0
  78. package/src/components/atoms/pill/pill.test.js +34 -0
  79. package/src/components/atoms/popover/components/backdrop/backdrop.component.tsx +40 -0
  80. package/src/components/atoms/popover/components/backdrop/backdrop.styles.js +15 -0
  81. package/src/components/atoms/popover/components/foreground/foreground.component.tsx +17 -0
  82. package/src/components/atoms/popover/components/foreground/foreground.styles.js +17 -0
  83. package/src/components/atoms/popover/components/index.js +5 -0
  84. package/src/components/atoms/popover/components/modal/close/close.component.tsx +21 -0
  85. package/src/components/atoms/popover/components/modal/close/close.styles.js +13 -0
  86. package/src/components/atoms/popover/components/modal/heading/heading.component.tsx +22 -0
  87. package/src/components/atoms/popover/components/modal/heading/heading.styles.js +24 -0
  88. package/src/components/atoms/popover/components/modal/modal.component.tsx +87 -0
  89. package/src/components/atoms/popover/components/modal/modal.styles.js +23 -0
  90. package/src/components/atoms/popover/components/modal/scroll-content/scroll-content.component.tsx +18 -0
  91. package/src/components/atoms/popover/components/modal/scroll-content/scroll-content.styles.js +10 -0
  92. package/src/components/atoms/popover/popover.component.tsx +60 -0
  93. package/src/components/atoms/popover/popover.preview.tsx +135 -0
  94. package/src/components/atoms/popover/popover.styles.js +12 -0
  95. package/src/components/atoms/popover-heading/__snapshots__/popover_heading.test.js.snap +35 -0
  96. package/src/components/atoms/popover-heading/popover-heading.component.tsx +22 -0
  97. package/src/components/atoms/popover-heading/popover-heading.preview.tsx +18 -0
  98. package/src/components/atoms/popover-heading/popover-heading.styles.js +19 -0
  99. package/src/components/atoms/popover-heading/popover_heading.test.js +11 -0
  100. package/src/components/atoms/pressable-icon/__snapshots__/pressable-icon.test.js.snap +364 -0
  101. package/src/components/atoms/pressable-icon/pressable-icon.component.tsx +48 -0
  102. package/src/components/atoms/pressable-icon/pressable-icon.preview.tsx +37 -0
  103. package/src/components/atoms/pressable-icon/pressable-icon.styles.js +25 -0
  104. package/src/components/atoms/pressable-icon/pressable-icon.test.js +47 -0
  105. package/src/components/atoms/quick-filter/__snapshots__/quick-filter.test.js.snap +465 -0
  106. package/src/components/atoms/quick-filter/quick-filter.component.tsx +32 -0
  107. package/src/components/atoms/quick-filter/quick-filter.prevriew.tsx +46 -0
  108. package/src/components/atoms/quick-filter/quick-filter.styles.js +68 -0
  109. package/src/components/atoms/quick-filter/quick-filter.test.js +127 -0
  110. package/src/components/atoms/select-list-item/__snapshots__/select-list-item.test.js.snap +391 -0
  111. package/src/components/atoms/select-list-item/select-list-item-preview.tsx +31 -0
  112. package/src/components/atoms/select-list-item/select-list-item.test.js +38 -0
  113. package/src/components/atoms/select-list-item/select-list.component-item.tsx +52 -0
  114. package/src/components/atoms/select-list-item/select-list.styles-item.js +40 -0
  115. package/src/components/atoms/snackbar/__snapshots__/snackbar.test.js.snap +493 -0
  116. package/src/components/atoms/snackbar/snackbar.component.tsx +28 -0
  117. package/src/components/atoms/snackbar/snackbar.preview.tsx +33 -0
  118. package/src/components/atoms/snackbar/snackbar.styles.js +82 -0
  119. package/src/components/atoms/snackbar/snackbar.test.js +35 -0
  120. package/src/components/atoms/tag/__snapshots__/tag.test.js.snap +87 -0
  121. package/src/components/atoms/tag/tag.component.tsx +37 -0
  122. package/src/components/atoms/tag/tag.preview.tsx +27 -0
  123. package/src/components/atoms/tag/tag.styles.js +22 -0
  124. package/src/components/atoms/tag/tag.test.js +24 -0
  125. package/src/components/atoms/text-bubble/__snapshots__/text-bubble.test.js.snap +337 -0
  126. package/src/components/atoms/text-bubble/text-bubble.component.tsx +32 -0
  127. package/src/components/atoms/text-bubble/text-bubble.preview.tsx +27 -0
  128. package/src/components/atoms/text-bubble/text-bubble.styles.js +64 -0
  129. package/src/components/atoms/text-bubble/text-bubble.test.js +84 -0
  130. package/src/components/atoms/text-input/__snapshots__/text-input.test.js.snap +68 -0
  131. package/src/components/atoms/text-input/text-input.component.tsx +32 -0
  132. package/src/components/atoms/text-input/text-input.preview.tsx +24 -0
  133. package/src/components/atoms/text-input/text-input.styles.js +26 -0
  134. package/src/components/atoms/text-input/text-input.test.js +32 -0
  135. package/src/components/atoms/time-tracker/__snapshots__/time-tracker.test.js.snap +206 -0
  136. package/src/components/atoms/time-tracker/time-tracker.component.tsx +24 -0
  137. package/src/components/atoms/time-tracker/time-tracker.preview.tsx +15 -0
  138. package/src/components/atoms/time-tracker/time-tracker.styles.js +36 -0
  139. package/src/components/atoms/time-tracker/time-tracker.test.js +37 -0
  140. package/src/components/atoms/wide-button/__snapshots__/wide-button.test.js.snap +92 -0
  141. package/src/components/atoms/wide-button/wide-button.component.tsx +23 -0
  142. package/src/components/atoms/wide-button/wide-button.preview.tsx +18 -0
  143. package/src/components/atoms/wide-button/wide-button.styles.js +22 -0
  144. package/src/components/atoms/wide-button/wide-button.test.js +16 -0
  145. package/src/context/theme.context.ts +49 -0
  146. package/src/gradients/main/main.gradient.tsx +20 -0
  147. package/src/gradients/main/main.styles.js +11 -0
  148. package/src/icons/__snapshots__/icons.test.js.snap +2588 -0
  149. package/src/icons/icons.test.js +245 -0
  150. package/src/icons/index.tsx +7 -0
  151. package/src/icons/outline/calendar/calendar.icon.tsx +20 -0
  152. package/src/icons/outline/chat/chat.icon.tsx +20 -0
  153. package/src/icons/outline/chat-alt/chat-alt.icon.tsx +20 -0
  154. package/src/icons/outline/check-circle/check-circle.icon.tsx +20 -0
  155. package/src/icons/outline/chevron-left/chevron-left.icon.tsx +20 -0
  156. package/src/icons/outline/chevron-right/chevron-right.icon.tsx +20 -0
  157. package/src/icons/outline/clock/clock.icon.tsx +20 -0
  158. package/src/icons/outline/cloud-download/cloud-download.icon.tsx +20 -0
  159. package/src/icons/outline/cross/cross.icon.tsx +20 -0
  160. package/src/icons/outline/currency-euro/currency-euro.icon.tsx +20 -0
  161. package/src/icons/outline/document-text/document-text.icon.tsx +20 -0
  162. package/src/icons/outline/exclamation/exclamation.icon.tsx +20 -0
  163. package/src/icons/outline/exclamation-circle/exclamation-circle.icon.tsx +20 -0
  164. package/src/icons/outline/eye/eye.icon.tsx +27 -0
  165. package/src/icons/outline/filter/filter.icon.tsx +59 -0
  166. package/src/icons/outline/information-circle/information-circle.icon.tsx +20 -0
  167. package/src/icons/outline/logout/logout.icon.tsx +20 -0
  168. package/src/icons/outline/mail/mail.icon.tsx +20 -0
  169. package/src/icons/outline/mail-open/mail-open.icon.tsx +20 -0
  170. package/src/icons/outline/menu/menu.icon.tsx +20 -0
  171. package/src/icons/outline/minus-sm/minus-sm.icon.tsx +20 -0
  172. package/src/icons/outline/office-building/office-building.icon.tsx +20 -0
  173. package/src/icons/outline/outline-default.preview.tsx +99 -0
  174. package/src/icons/outline/outline-grey.preview.tsx +100 -0
  175. package/src/icons/outline/outline-white.preview.tsx +100 -0
  176. package/src/icons/outline/outline.tsx +81 -0
  177. package/src/icons/outline/paper-airplane/paper-airplane.icon.tsx +20 -0
  178. package/src/icons/outline/paperclip/paperclip.icon.tsx +20 -0
  179. package/src/icons/outline/pencil/pencil.icon.tsx +20 -0
  180. package/src/icons/outline/phone/phone.icon.tsx +20 -0
  181. package/src/icons/outline/plus/plus.icon.tsx +20 -0
  182. package/src/icons/outline/plus-sm/plus-sm.icon.tsx +20 -0
  183. package/src/icons/outline/qrcode/qrcode.icon.tsx +17 -0
  184. package/src/icons/outline/refresh/refresh.icon.tsx +20 -0
  185. package/src/icons/outline/search/search.icon.tsx +20 -0
  186. package/src/icons/outline/selector/selector.icon.tsx +20 -0
  187. package/src/icons/outline/sm-view-grid-add/sm-view-grid-add.icon.tsx +20 -0
  188. package/src/icons/outline/status-online/status-online.icon.tsx +20 -0
  189. package/src/icons/outline/thumb-up/thumb-up.icon.tsx +20 -0
  190. package/src/icons/outline/trash/trash.icon.tsx +20 -0
  191. package/src/icons/outline/user/user.icon.tsx +27 -0
  192. package/src/icons/outline/user-group/user-group.icon.tsx +20 -0
  193. package/src/icons/outline/users/users.icon.tsx +20 -0
  194. package/src/icons/solid/chat-alt/chat-alt-solid.icon.tsx +20 -0
  195. package/src/icons/solid/clock/clock-solid.icon.tsx +20 -0
  196. package/src/icons/solid/information-circle/information-circle-solid.icon.tsx +20 -0
  197. package/src/icons/solid/pencil/pencil-solid.icon.tsx +22 -0
  198. package/src/icons/solid/phone/phone-solid.icon.tsx +18 -0
  199. package/src/icons/solid/refresh/refresh-solid.icon.tsx +20 -0
  200. package/src/icons/solid/solid.preview.tsx +73 -0
  201. package/src/icons/solid/solid.tsx +19 -0
  202. package/src/icons/solid/status-online/status-online-solid.icon.tsx +24 -0
  203. package/src/icons/solid/trash/trash-solid.icon.tsx +20 -0
  204. package/src/models/hex-color.model.ts +25 -0
  205. package/src/models/hex-color.test.js +20 -0
  206. package/src/models/initials.model.ts +32 -0
  207. package/src/models/initials.test.js +23 -0
  208. package/src/theme/font/font.ts +72 -0
  209. package/src/theme/font/index.ts +4 -0
  210. package/src/theme/font/load-fonts.ts +10 -0
  211. package/src/theme/provider/index.ts +4 -0
  212. package/src/theme/provider/parent.theme.ts +45 -0
  213. package/src/theme/provider/staff-member.theme.ts +45 -0
  214. package/src/theme/scale/index.ts +14 -0
  215. package/src/types/bubble-alignment.enum.ts +4 -0
  216. package/src/types/icontype.type.ts +3 -0
  217. package/src/types/keyboard-types.enum.ts +9 -0
  218. package/src/types/size.enum.ts +5 -0
  219. package/src/types/visual-state.enum.ts +6 -0
  220. package/tsconfig.json +7 -0
@@ -0,0 +1,65 @@
1
+ import React, {useState} from 'react';
2
+ import {ChildListItem} from './child-list-item.component';
3
+ import {View} from 'react-native';
4
+ import {VisualState} from '../../../types/visual-state.enum';
5
+
6
+ export const ChildListItemPreview = ({}: {}) => {
7
+ const [selectedId, setSelectedId] = useState<string[]>([]);
8
+
9
+ const addIdToSelected = (id: string) => {
10
+ setSelectedId((current) => [...current, id]);
11
+ };
12
+ const isIdSelected = (id: string) => {
13
+ return selectedId.includes(id);
14
+ };
15
+
16
+ return (
17
+ <View
18
+ style={{
19
+ flex: 1,
20
+ alignItems: 'center',
21
+ justifyContent: 'center',
22
+ }}
23
+ >
24
+ <ChildListItem
25
+ id={'id1'}
26
+ name={'Luca Janssens 123456789011223344556677889900'}
27
+ label={'De Teddybeertjes'}
28
+ selectable={true}
29
+ onSelect={addIdToSelected}
30
+ isSelected={isIdSelected('id1')}
31
+ sourceAvatar={require('./../../../../assets/components/avatar/baby.png')}
32
+ textTimeTracker={'3u45m'}
33
+ visualStateTimeTracker={VisualState.SUCCESS}
34
+ onPressArrow={() => console.log('Arrow pressed')}
35
+ onPressText={() => console.log('text pressed')}
36
+ />
37
+ <ChildListItem
38
+ id={'id2'}
39
+ name={'Luca Janssens'}
40
+ label={'De Teddybeertjes'}
41
+ selectable={true}
42
+ isSelected={true}
43
+ onSelect={addIdToSelected}
44
+ sourceAvatar={require('./../../../../assets/components/avatar/baby.png')}
45
+ textTimeTracker={'3u45m'}
46
+ visualStateTimeTracker={VisualState.SUCCESS}
47
+ onPressArrow={() => console.log('Arrow pressed')}
48
+ onPressText={() => console.log('text pressed')}
49
+ />
50
+ <ChildListItem
51
+ id={'id'}
52
+ name={'Luca Janssens'}
53
+ label={'De Teddybeertjes'}
54
+ selectable={false}
55
+ onSelect={addIdToSelected}
56
+ isSelected={isIdSelected('id')}
57
+ sourceAvatar={require('./../../../../assets/components/avatar/baby.png')}
58
+ textTimeTracker={'3u45m'}
59
+ visualStateTimeTracker={VisualState.SUCCESS}
60
+ onPressArrow={() => console.log('Arrow pressed')}
61
+ onPressText={() => console.log('text pressed')}
62
+ />
63
+ </View>
64
+ );
65
+ };
@@ -0,0 +1,82 @@
1
+ import React from 'react';
2
+ import {StyleSheet} from 'react-native';
3
+ import {Font} from '../../../theme/font';
4
+ import {Scale} from '../../../theme/scale';
5
+ import {VisualState} from '../../../types/visual-state.enum';
6
+
7
+ export const Stylesheet = (
8
+ isSelectedItem,
9
+ context,
10
+ selectable,
11
+ visualStateTimeTracker
12
+ ) =>
13
+ StyleSheet.create({
14
+ container: {
15
+ width: '100%',
16
+ borderTopRightRadius: Scale.l,
17
+ borderBottomRightRadius: Scale.l,
18
+ borderTopLeftRadius: Scale.xxl,
19
+ borderBottomLeftRadius: Scale.xxl,
20
+ overflow: 'hidden',
21
+ flexDirection: 'row',
22
+ backgroundColor: isSelectedItem
23
+ ? context.colors.main[6]
24
+ : context.colors.ui.white,
25
+ },
26
+ selectableContainer: {},
27
+ innerContainer: {
28
+ flex: 1,
29
+ flexDirection: 'row',
30
+ alignItems: 'center',
31
+ padding: Scale.xs,
32
+ borderTopRightRadius: Scale.l,
33
+ borderBottomRightRadius: Scale.l,
34
+ borderTopLeftRadius: Scale.xxl,
35
+ borderBottomLeftRadius: Scale.xxl,
36
+ },
37
+ pressableText: {
38
+ marginLeft: Scale.m,
39
+ flex: 1,
40
+ marginRight: selectable ? Scale.xxxl : Scale.xl,
41
+ },
42
+ iconContainer: {
43
+ alignItems: 'center',
44
+ justifyContent: 'center',
45
+ },
46
+ textName: {
47
+ ...Font.bigBold,
48
+ color: isSelectedItem ? context.colors.ui.white : context.colors.ui.black,
49
+ },
50
+ textLabel: {
51
+ ...Font.small,
52
+ color: isSelectedItem ? context.colors.ui.white : context.colors.ui.black,
53
+ },
54
+ trackerContainer: {
55
+ flexDirection: 'row',
56
+ alignItems: 'center',
57
+ },
58
+ bal: [
59
+ {
60
+ width: Scale.s,
61
+ height: Scale.s,
62
+ borderRadius: Scale.s / 2,
63
+ marginRight: Scale.xxs,
64
+ },
65
+ visualStateTimeTracker === VisualState.DEFAULT && {
66
+ backgroundColor: context.colors.main['0'],
67
+ },
68
+ visualStateTimeTracker === VisualState.SUCCESS && {
69
+ backgroundColor: context.colors.ui.success.default,
70
+ },
71
+ visualStateTimeTracker === VisualState.WARNING && {
72
+ backgroundColor: context.colors.ui.warning.default,
73
+ },
74
+ visualStateTimeTracker === VisualState.ERROR && {
75
+ backgroundColor: context.colors.ui.error.default,
76
+ },
77
+ ],
78
+ textTracker: {
79
+ ...Font.tiny,
80
+ color: isSelectedItem ? context.colors.ui.white : context.colors.ui.black,
81
+ },
82
+ });
@@ -0,0 +1,73 @@
1
+ import React from 'react';
2
+ import render from 'react-test-renderer';
3
+ import {ChildListItem} from './child-list-item.component';
4
+ import {Avatar} from '../avatar/avatar.component';
5
+ import {SelectListItem} from '../select-list-item/select-list.component-item';
6
+ import renderer from 'react-test-renderer';
7
+ import {VisualState} from '../../../types/visual-state.enum';
8
+
9
+ describe('test child list item component', () => {
10
+ it('make text that is too long end in ...', () => {
11
+ const tree = render
12
+ .create(
13
+ <ChildListItem
14
+ id={1}
15
+ name={'Jean-Paul Janssens-Peeters'}
16
+ label={'De Teddybeertjes'}
17
+ selectable={true}
18
+ isSelected={false}
19
+ onPressArrow={() => console.log('pressedArrow')}
20
+ onPressText={() => console.log('pressedText')}
21
+ onSelect={() => console.log('selected')}
22
+ sourceAvatar={require('./../../../../assets/components/avatar/baby.png')}
23
+ textTimeTracker={'time tracker'}
24
+ visualStateTimeTracker={VisualState.SUCCESS}
25
+ />
26
+ )
27
+ .toJSON();
28
+
29
+ expect(tree).toMatchSnapshot();
30
+ });
31
+ it('background is blue and text is white when isSelected is true', () => {
32
+ const tree = render
33
+ .create(
34
+ <ChildListItem
35
+ id={1}
36
+ name={'Jean-Paul Janssens-Peeters'}
37
+ label={'De Teddybeertjes'}
38
+ selectable={true}
39
+ isSelected={true}
40
+ onPressArrow={() => console.log('pressedArrow')}
41
+ onPressText={() => console.log('pressedText')}
42
+ onSelect={() => console.log('selected')}
43
+ sourceAvatar={require('./../../../../assets/components/avatar/baby.png')}
44
+ textTimeTracker={'time tracker'}
45
+ visualStateTimeTracker={VisualState.SUCCESS}
46
+ />
47
+ )
48
+ .toJSON();
49
+
50
+ expect(tree).toMatchSnapshot();
51
+ });
52
+ it('arrow appears when selectable is false', () => {
53
+ const tree = render
54
+ .create(
55
+ <ChildListItem
56
+ id={1}
57
+ name={'Jean-Paul Janssens-Peeters'}
58
+ label={'De Teddybeertjes'}
59
+ selectable={false}
60
+ isSelected={false}
61
+ onPressArrow={() => console.log('pressedArrow')}
62
+ onPressText={() => console.log('pressedText')}
63
+ onSelect={() => console.log('selected')}
64
+ sourceAvatar={require('./../../../../assets/components/avatar/baby.png')}
65
+ textTimeTracker={'time tracker'}
66
+ visualStateTimeTracker={VisualState.SUCCESS}
67
+ />
68
+ )
69
+ .toJSON();
70
+
71
+ expect(tree).toMatchSnapshot();
72
+ });
73
+ });
@@ -0,0 +1,321 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`test contact-item renders a contact-item with a red avatar and an extra pill when isBlocked is true 1`] = `
4
+ <View
5
+ accessible={true}
6
+ collapsable={false}
7
+ focusable={true}
8
+ onBlur={[Function]}
9
+ onClick={[Function]}
10
+ onFocus={[Function]}
11
+ onResponderGrant={[Function]}
12
+ onResponderMove={[Function]}
13
+ onResponderRelease={[Function]}
14
+ onResponderTerminate={[Function]}
15
+ onResponderTerminationRequest={[Function]}
16
+ onStartShouldSetResponder={[Function]}
17
+ >
18
+ <View
19
+ style={
20
+ {
21
+ "alignItems": "center",
22
+ "flexDirection": "row",
23
+ "width": "100%",
24
+ }
25
+ }
26
+ >
27
+ <View
28
+ style={
29
+ [
30
+ {
31
+ "alignItems": "center",
32
+ "backgroundColor": "#647ACB",
33
+ "justifyContent": "center",
34
+ "overflow": "hidden",
35
+ },
36
+ {
37
+ "borderRadius": 20,
38
+ "height": 40,
39
+ "width": 40,
40
+ },
41
+ false,
42
+ false,
43
+ ]
44
+ }
45
+ >
46
+ <Text
47
+ style={
48
+ [
49
+ {
50
+ "color": "#FFFFFF",
51
+ "textTransform": "uppercase",
52
+ },
53
+ {
54
+ "fontFamily": "SourceSansProBold",
55
+ "fontSize": 16,
56
+ "lineHeight": 22.4,
57
+ },
58
+ false,
59
+ false,
60
+ ]
61
+ }
62
+ >
63
+ DD
64
+ </Text>
65
+ </View>
66
+ <View
67
+ style={
68
+ {
69
+ "flex": 1,
70
+ "marginLeft": 8,
71
+ }
72
+ }
73
+ >
74
+ <Text
75
+ style={
76
+ {
77
+ "fontFamily": "MontserratBold",
78
+ "fontSize": 14,
79
+ "lineHeight": 22.4,
80
+ }
81
+ }
82
+ >
83
+ Doe
84
+
85
+ Doe
86
+ </Text>
87
+ <Text
88
+ style={
89
+ {
90
+ "fontFamily": "Montserrat",
91
+ "fontSize": 11,
92
+ "lineHeight": 17.9,
93
+ }
94
+ }
95
+ >
96
+ ouder 1
97
+ </Text>
98
+ </View>
99
+ <View
100
+ style={
101
+ {
102
+ "marginLeft": 8,
103
+ }
104
+ }
105
+ >
106
+ <RNSVGSvgView
107
+ align="xMidYMid"
108
+ bbHeight="28"
109
+ bbWidth="28"
110
+ fill="none"
111
+ focusable={false}
112
+ height="28"
113
+ meetOrSlice={0}
114
+ minX={0}
115
+ minY={0}
116
+ style={
117
+ [
118
+ {
119
+ "backgroundColor": "transparent",
120
+ "borderWidth": 0,
121
+ },
122
+ {
123
+ "flex": 0,
124
+ "height": 28,
125
+ "width": 28,
126
+ },
127
+ ]
128
+ }
129
+ vbHeight={27}
130
+ vbWidth={26}
131
+ width="28"
132
+ >
133
+ <RNSVGGroup
134
+ fill={null}
135
+ propList={
136
+ [
137
+ "fill",
138
+ ]
139
+ }
140
+ >
141
+ <RNSVGPath
142
+ d="M9.75 5.625L17.3333 13.5L9.75 21.375"
143
+ propList={
144
+ [
145
+ "stroke",
146
+ "strokeWidth",
147
+ "strokeLinecap",
148
+ "strokeLinejoin",
149
+ ]
150
+ }
151
+ stroke={4279837036}
152
+ strokeLinecap={1}
153
+ strokeLinejoin={1}
154
+ strokeWidth="2"
155
+ />
156
+ </RNSVGGroup>
157
+ </RNSVGSvgView>
158
+ </View>
159
+ </View>
160
+ </View>
161
+ `;
162
+
163
+ exports[`test contact-item renders a contact-item, with an avatar 1`] = `
164
+ <View
165
+ accessible={true}
166
+ collapsable={false}
167
+ focusable={true}
168
+ onBlur={[Function]}
169
+ onClick={[Function]}
170
+ onFocus={[Function]}
171
+ onResponderGrant={[Function]}
172
+ onResponderMove={[Function]}
173
+ onResponderRelease={[Function]}
174
+ onResponderTerminate={[Function]}
175
+ onResponderTerminationRequest={[Function]}
176
+ onStartShouldSetResponder={[Function]}
177
+ >
178
+ <View
179
+ style={
180
+ {
181
+ "alignItems": "center",
182
+ "flexDirection": "row",
183
+ "width": "100%",
184
+ }
185
+ }
186
+ >
187
+ <View
188
+ style={
189
+ [
190
+ {
191
+ "alignItems": "center",
192
+ "backgroundColor": "#647ACB",
193
+ "justifyContent": "center",
194
+ "overflow": "hidden",
195
+ },
196
+ {
197
+ "borderRadius": 20,
198
+ "height": 40,
199
+ "width": 40,
200
+ },
201
+ false,
202
+ false,
203
+ ]
204
+ }
205
+ >
206
+ <Text
207
+ style={
208
+ [
209
+ {
210
+ "color": "#FFFFFF",
211
+ "textTransform": "uppercase",
212
+ },
213
+ {
214
+ "fontFamily": "SourceSansProBold",
215
+ "fontSize": 16,
216
+ "lineHeight": 22.4,
217
+ },
218
+ false,
219
+ false,
220
+ ]
221
+ }
222
+ >
223
+ JD
224
+ </Text>
225
+ </View>
226
+ <View
227
+ style={
228
+ {
229
+ "flex": 1,
230
+ "marginLeft": 8,
231
+ }
232
+ }
233
+ >
234
+ <Text
235
+ style={
236
+ {
237
+ "fontFamily": "MontserratBold",
238
+ "fontSize": 14,
239
+ "lineHeight": 22.4,
240
+ }
241
+ }
242
+ >
243
+ John
244
+
245
+ Doe
246
+ </Text>
247
+ <Text
248
+ style={
249
+ {
250
+ "fontFamily": "Montserrat",
251
+ "fontSize": 11,
252
+ "lineHeight": 17.9,
253
+ }
254
+ }
255
+ >
256
+ ouder 1
257
+ </Text>
258
+ </View>
259
+ <View
260
+ style={
261
+ {
262
+ "marginLeft": 8,
263
+ }
264
+ }
265
+ >
266
+ <RNSVGSvgView
267
+ align="xMidYMid"
268
+ bbHeight="28"
269
+ bbWidth="28"
270
+ fill="none"
271
+ focusable={false}
272
+ height="28"
273
+ meetOrSlice={0}
274
+ minX={0}
275
+ minY={0}
276
+ style={
277
+ [
278
+ {
279
+ "backgroundColor": "transparent",
280
+ "borderWidth": 0,
281
+ },
282
+ {
283
+ "flex": 0,
284
+ "height": 28,
285
+ "width": 28,
286
+ },
287
+ ]
288
+ }
289
+ vbHeight={27}
290
+ vbWidth={26}
291
+ width="28"
292
+ >
293
+ <RNSVGGroup
294
+ fill={null}
295
+ propList={
296
+ [
297
+ "fill",
298
+ ]
299
+ }
300
+ >
301
+ <RNSVGPath
302
+ d="M9.75 5.625L17.3333 13.5L9.75 21.375"
303
+ propList={
304
+ [
305
+ "stroke",
306
+ "strokeWidth",
307
+ "strokeLinecap",
308
+ "strokeLinejoin",
309
+ ]
310
+ }
311
+ stroke={4279837036}
312
+ strokeLinecap={1}
313
+ strokeLinejoin={1}
314
+ strokeWidth="2"
315
+ />
316
+ </RNSVGGroup>
317
+ </RNSVGSvgView>
318
+ </View>
319
+ </View>
320
+ </View>
321
+ `;
@@ -0,0 +1,61 @@
1
+ import React, {useContext} from 'react';
2
+ import {Stylesheet} from './contact-item.styles';
3
+ import {Avatar} from '../avatar/avatar.component';
4
+ import {Initials} from '../../../models/initials.model';
5
+ import {ThemeCtx} from '../../../context/theme.context';
6
+ import {View, Text} from 'react-native';
7
+ import {Pressable} from 'react-native';
8
+ import {Size} from '../../../types/size.enum';
9
+ import {Pill} from '../pill/pill.component';
10
+ import {VisualState} from '../../../types/visual-state.enum';
11
+ import {ChevronRightIcon} from '../../../icons/outline/chevron-right/chevron-right.icon';
12
+
13
+ type ContactItemProps = {
14
+ name: string;
15
+ firstname: string;
16
+ label: string;
17
+ onPress?: () => void;
18
+ isBlocked?: boolean;
19
+ };
20
+
21
+ const ContactItem = ({
22
+ name,
23
+ firstname,
24
+ label,
25
+ onPress,
26
+ isBlocked,
27
+ }: ContactItemProps) => {
28
+ const context = useContext(ThemeCtx);
29
+ const styles = Stylesheet(context);
30
+
31
+ return (
32
+ <Pressable onPress={onPress}>
33
+ <View style={styles.container}>
34
+ {isBlocked ? (
35
+ <Avatar
36
+ isBlocked={true}
37
+ source={Initials.for(firstname, name)}
38
+ size={Size.SMALL}
39
+ />
40
+ ) : (
41
+ <Avatar source={Initials.for(firstname, name)} size={Size.SMALL} />
42
+ )}
43
+ <View style={styles.textContainer}>
44
+ <Text style={styles.textNames}>
45
+ {firstname} {name}
46
+ </Text>
47
+ <Text style={styles.textSubtitle}>{label}</Text>
48
+ </View>
49
+ {isBlocked ? (
50
+ <Pill label={'Geblokkeerd'} variant={VisualState.ERROR} />
51
+ ) : null}
52
+ <View style={styles.iconSquare}>
53
+ {/*<FilterIcon />*/}
54
+ <ChevronRightIcon />
55
+ </View>
56
+ </View>
57
+ </Pressable>
58
+ );
59
+ };
60
+
61
+ export {ContactItem as ContactItem};
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import {ContactItem} from './contact-item.component';
3
+
4
+ const {View} = require('react-native');
5
+
6
+ export const ContactItemPreview = ({}: {}) => {
7
+ return (
8
+ <View
9
+ style={{
10
+ flex: 1,
11
+ alignItems: 'center',
12
+ justifyContent: 'center',
13
+ }}
14
+ >
15
+ <ContactItem
16
+ name={'Doe'}
17
+ firstname={'John'}
18
+ label={'Ouder 1'}
19
+ onPress={() => console.log('clicked')}
20
+ />
21
+ <ContactItem
22
+ name={'Doe'}
23
+ firstname={'John'}
24
+ label={'Ouder 1'}
25
+ onPress={() => console.log('clicked')}
26
+ isBlocked={true}
27
+ />
28
+ </View>
29
+ );
30
+ };
@@ -0,0 +1,26 @@
1
+ import React from 'react';
2
+ import {StyleSheet} from 'react-native';
3
+ import {Font} from '../../../theme/font';
4
+ import {Scale} from '../../../theme/scale';
5
+
6
+ export const Stylesheet = (Context) =>
7
+ StyleSheet.create({
8
+ container: {
9
+ width: '100%',
10
+ flexDirection: 'row',
11
+ alignItems: 'center',
12
+ },
13
+ textContainer: {
14
+ flex: 1,
15
+ marginLeft: Scale.xs,
16
+ },
17
+ textNames: {
18
+ ...Font.regularBold,
19
+ },
20
+ textSubtitle: {
21
+ ...Font.tiny,
22
+ },
23
+ iconSquare: {
24
+ marginLeft: Scale.xs,
25
+ },
26
+ });
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import renderer from 'react-test-renderer';
3
+ import {ContactItem} from './contact-item.component';
4
+
5
+ describe('test contact-item', () => {
6
+ it('renders a contact-item, with an avatar', () => {
7
+ const tree = renderer
8
+ .create(<ContactItem name={'Doe'} firstname={'John'} label={'ouder 1'} />)
9
+ .toJSON();
10
+
11
+ expect(tree).toMatchSnapshot();
12
+ });
13
+ it('renders a contact-item with a red avatar and an extra pill when isBlocked is true ', () => {
14
+ const tree = renderer
15
+ .create(<ContactItem name={'Doe'} firstname={'Doe'} label={'ouder 1'} />)
16
+ .toJSON();
17
+
18
+ expect(tree).toMatchSnapshot();
19
+ });
20
+ });