55 combine ,
66 sample ,
77 EventCallable ,
8- StoreWritable ,
98} from 'effector' ;
109
1110import type {
@@ -16,65 +15,7 @@ import type {
1615 ServicemanId ,
1716} from '../types' ;
1817import { createPassenger , getDefaultDocument } from './calculateUtils' ;
19-
20- function subtypeOperation <
21- T ,
22- TypeKey extends keyof T ,
23- const Cases extends ReadonlyArray < T [ TypeKey ] > ,
24- Upd ,
25- > ( {
26- store,
27- typeKey,
28- on,
29- fn,
30- } : {
31- store : StoreWritable < T > ;
32- typeKey : TypeKey ;
33- on : Cases ;
34- fn : (
35- upd : Upd ,
36- value : Extract < T , Record < TypeKey , Cases [ keyof Cases ] > > ,
37- ) => Partial < T > ;
38- } ) {
39- const trigger = createEvent < Upd > ( ) ;
40- sample ( {
41- clock : trigger ,
42- source : store ,
43- fn ( value , upd ) {
44- const caseName = value [ typeKey ] ;
45- if ( on . includes ( caseName ) ) {
46- const partialResult = fn ( upd , value as any ) ;
47- return {
48- ...value ,
49- ...partialResult ,
50- } ;
51- }
52- return value ;
53- } ,
54- target : store ,
55- } ) ;
56- return trigger ;
57- }
58-
59- function createSubtypeOp < T , TypeKey extends keyof T > (
60- store : StoreWritable < T > ,
61- typeKey : TypeKey ,
62- ) {
63- return function op < const Cases extends ReadonlyArray < T [ TypeKey ] > , Upd > (
64- on : Cases ,
65- fn : (
66- upd : Upd ,
67- value : Extract < T , Record < TypeKey , Cases [ keyof Cases ] > > ,
68- ) => Partial < T > ,
69- ) {
70- return subtypeOperation ( {
71- store,
72- typeKey,
73- on,
74- fn,
75- } ) ;
76- } ;
77- }
18+ import { createSubtypeOperation } from './createSubtypeOperation' ;
7819
7920export const passengersList = keyval ( ( ) => {
8021 const $index = createStore ( - 1 ) ;
@@ -107,28 +48,28 @@ export const passengersList = keyval(() => {
10748 target : $document ,
10849 } ) ;
10950
110- const documentOp = createSubtypeOp ( $document , 'type' ) ;
51+ const createDocumentEditor = createSubtypeOperation ( $document , 'type' ) ;
11152
112- const editCitizenship = documentOp (
53+ const editCitizenship = createDocumentEditor (
11354 [ 'foreign-id' ] ,
11455 ( value : ForeignId [ 'citizenship' ] ) => ( { citizenship : value } ) ,
11556 ) ;
11657
117- const editCategory = documentOp (
58+ const editCategory = createDocumentEditor (
11859 [ 'military-ticket' , 'serviceman-ticket' ] ,
11960 ( value : MilitaryTicket [ 'category' ] | ServicemanId [ 'category' ] ) => ( {
12061 category : value ,
12162 } ) ,
12263 ) ;
12364
124- const editStartDate = documentOp (
65+ const editStartDate = createDocumentEditor (
12566 [ 'military-ticket' , 'serviceman-ticket' ] ,
12667 ( value : Date | null ) => ( {
12768 startDate : value ,
12869 } ) ,
12970 ) ;
13071
131- const editIsNotServed = documentOp (
72+ const editIsNotServed = createDocumentEditor (
13273 [ 'military-ticket' , 'serviceman-ticket' ] ,
13374 ( value : boolean , { startDate } ) => ( {
13475 startDate : value ? null : startDate ,
@@ -177,12 +118,3 @@ export const setPassengersAmount = passengersList.edit.add.prepend(
177118
178119export const removePassenger = passengersList . edit
179120 . remove as EventCallable < number > ;
180- export const editPassenger = passengersList . edit . update ;
181-
182- export const {
183- changeDocumentType,
184- changeDocumentNumber,
185- editCitizenship,
186- editCategory,
187- editStartDate,
188- } = passengersList . api ;
0 commit comments