1import * as React from 'react'
2import * as Types from '../../constants/types/devices'
3import * as Constants from '../../constants/devices'
4import * as Container from '../../util/container'
5import * as Sb from '../../stories/storybook'
6import DevicePage from './container'
7
8const makeDevice = (options: any) => {
9  const {revoked, type, current, lastUsed = true} = options
10  return Constants.makeDevice({
11    created: options.created,
12    currentDevice: !!current,
13    deviceID: Types.stringToDeviceID(options.deviceID),
14    lastUsed: lastUsed ? new Date('2002-10-10T01:23:45').getTime() : 0,
15    name: `My ${type}`,
16    revokedAt: revoked ? new Date('2002-10-11T01:23:45').getTime() : undefined,
17    type,
18  })
19}
20
21const common = Sb.createStoreWithCommon()
22
23const store = Container.produce(common, draftState => {
24  const deviceMap = new Map(draftState.devices.deviceMap)
25  deviceMap.set('backup', makeDevice({created: 0, deviceID: 'backup', type: 'backup'}))
26  deviceMap.set(
27    'backup revoked',
28    makeDevice({created: 1, deviceID: 'backup revoked', revoked: true, type: 'backup'})
29  )
30  deviceMap.set('desktop', makeDevice({created: 2, deviceID: 'desktop', type: 'desktop'}))
31  deviceMap.set(
32    'desktop current',
33    makeDevice({created: 3, current: true, deviceID: 'desktop current', type: 'desktop'})
34  )
35  deviceMap.set(
36    'desktop no last',
37    makeDevice({created: 4, deviceID: 'desktop no last', lastUsed: false, type: 'desktop'})
38  )
39  deviceMap.set(
40    'desktop revoked',
41    makeDevice({created: 5, deviceID: 'desktop revoked', revoked: true, type: 'desktop'})
42  )
43  deviceMap.set('mobile', makeDevice({created: 6, deviceID: 'mobile', type: 'mobile'}))
44  deviceMap.set(
45    'mobile revoked',
46    makeDevice({created: 7, deviceID: 'mobile revoked', revoked: true, type: 'mobile'})
47  )
48  draftState.devices.deviceMap = deviceMap
49})
50
51const storeNOPW = Container.produce(common, draftState => {
52  const deviceMap = new Map(draftState.devices.deviceMap)
53  deviceMap.set('desktop last nopw', makeDevice({deviceID: 'desktop last nopw', type: 'desktop'}))
54  draftState.devices.deviceMap = deviceMap
55  draftState.settings.password.randomPW = true
56})
57
58const load = () => {
59  Sb.storiesOf('Devices/Device', module)
60    .addDecorator((story: any) => <Sb.MockStore store={store}>{story()}</Sb.MockStore>)
61    .add('Desktop', () => <DevicePage {...Sb.createNavigator({deviceID: 'desktop'})} />)
62    .add('Desktop no last used', () => <DevicePage {...Sb.createNavigator({deviceID: 'desktop no last'})} />)
63    .add('Desktop current', () => <DevicePage {...Sb.createNavigator({deviceID: 'desktop current'})} />)
64    .add('Desktop Revoked', () => <DevicePage {...Sb.createNavigator({deviceID: 'desktop revoked'})} />)
65    .add('Mobile', () => <DevicePage {...Sb.createNavigator({deviceID: 'mobile'})} />)
66    .add('Mobile Revoked', () => <DevicePage {...Sb.createNavigator({deviceID: 'mobile revoked'})} />)
67    .add('Paper key', () => <DevicePage {...Sb.createNavigator({deviceID: 'backup'})} />)
68    .add('Paper key Revoked', () => <DevicePage {...Sb.createNavigator({deviceID: 'backup revoked'})} />)
69  Sb.storiesOf('Devices/Device/NOPW', module)
70    .addDecorator((story: any) => <Sb.MockStore store={storeNOPW}>{story()}</Sb.MockStore>)
71    .add('Desktop only device', () => <DevicePage {...Sb.createNavigator({deviceID: 'desktop last nopw'})} />)
72}
73
74export default load
75