@@ -5,37 +5,49 @@ import {
55 ReactNode ,
66 useEffect ,
77} from "react" ;
8- import { GPTResponse } from "./types/types" ;
9- import { UpdateData } from "./types/types" ;
8+ import { GPTResponse , FullDataType , Conflict } from "./types/types" ;
109
1110// Define the shape of the data
1211
12+ type RedConflicts = {
13+ id : number ;
14+ fields : string [ ] ;
15+ } ;
16+
1317//updateContact<K extends keyof Contact>(id: number, field: K, value: Contact[K])
1418interface TableDataContextType {
15- initialGPTPasses : GPTResponse [ ] ; // Adjust the type of `data` based on your use case
19+ initialGPTPasses : GPTResponse [ ] ;
1620 setInitialGPTPasses : ( data : GPTResponse [ ] ) => void ; // Function to update the data
17- tableEntries : UpdateData [ ] ; // Adjust the type of `data` based on your use case
18- updateEntry : < K extends keyof UpdateData > (
19- id : number ,
20- key : string ,
21- value : UpdateData [ K ]
22- ) => void ;
23- updateEntry2 : ( id : number , value : UpdateData ) => void ;
24- addEntry : ( entry : UpdateData ) => void ;
21+ tableEntries : FullDataType [ ] ;
22+ updateEntry : ( id : number , value : FullDataType ) => void ;
23+ addEntry : ( entry : FullDataType ) => void ;
24+ removePass : ( id : number ) => GPTResponse [ ] ;
2525 removeEntry : ( id : number ) => void ;
26- retrieveEntry : ( id : number ) => UpdateData | undefined ;
26+ redConflicts : RedConflicts [ ] ;
27+ setRedConflict : ( id : number , fields : string [ ] ) => void ;
28+ removeRedConflict : ( id : number ) => void ;
29+ allConflicts : Conflict [ ] ;
30+ addConflict : ( conflicts : Conflict ) => void ;
31+ removeConflict : ( id : number ) => void ;
32+ updateConflict : ( id : number , fields : Conflict ) => void ;
2733}
2834
2935// Define the default value of the context
3036const defaultValue : TableDataContextType = {
3137 initialGPTPasses : [ ] ,
3238 setInitialGPTPasses : ( ) => { } ,
3339 updateEntry : ( ) => { } ,
34- updateEntry2 : ( ) => { } ,
35- addEntry : ( ) => { } ,
3640 removeEntry : ( ) => { } ,
41+ addEntry : ( ) => { } ,
42+ removePass : ( ) => [ ] ,
3743 tableEntries : [ ] ,
38- retrieveEntry : ( ) => undefined ,
44+ redConflicts : [ ] ,
45+ setRedConflict : ( ) => { } ,
46+ removeRedConflict : ( ) => { } ,
47+ allConflicts : [ ] ,
48+ addConflict : ( ) => { } ,
49+ removeConflict : ( ) => { } ,
50+ updateConflict : ( ) => { } ,
3951} ;
4052
4153// Create the context
@@ -48,34 +60,52 @@ export const TableDataFormProvider = ({
4860 children : ReactNode ;
4961} ) => {
5062 const [ initialGPTPasses , setInitialGPTPasses ] = useState < GPTResponse [ ] > ( [ ] ) ;
51- const [ tableEntries , setTableEntries ] = useState < UpdateData [ ] > ( [ ] ) ;
63+ const [ tableEntries , setTableEntries ] = useState < FullDataType [ ] > ( [ ] ) ;
64+ const [ redConflicts , setRedConflicts ] = useState < RedConflicts [ ] > ( [ ] ) ;
65+ const [ allConflicts , setAllConflicts ] = useState < Conflict [ ] > (
66+ [ ] as Conflict [ ]
67+ ) ;
5268
5369 useEffect ( ( ) => {
54- console . log ( "Updated contacts:" , tableEntries ) ;
55- } , [ tableEntries ] ) ;
56-
57- function updateEntry < K extends keyof UpdateData > (
58- id : number ,
59- key : string ,
60- value : UpdateData [ K ]
61- ) {
62- setTableEntries ( ( prev ) =>
63- prev . map ( ( entry ) =>
64- entry . ROWID === id ? { ...entry , [ key ] : value } : entry
65- )
66- ) ;
70+ console . log ( "addconflicts" , allConflicts ) ;
71+ } , [ allConflicts ] ) ;
72+
73+ function addConflict ( conflicts : Conflict ) {
74+ setAllConflicts ( ( prev ) => {
75+ const newConflicts = [ ...prev ] ;
76+ newConflicts . push ( conflicts ) ;
77+ return newConflicts ;
78+ } ) ;
6779 }
6880
69- function updateEntry2 ( id : number , value : UpdateData ) {
70- setTableEntries ( ( prev ) =>
71- prev . map ( ( entry ) => ( entry . ROWID === id ? { ...value } : entry ) )
72- ) ;
81+ function removeConflict ( id : number ) {
82+ console . log ( "id" , id ) ;
83+ setAllConflicts ( ( prev ) => {
84+ const newConflicts = [ ...prev ] ;
85+ newConflicts . splice ( id , 1 ) ;
86+ return newConflicts ;
87+ } ) ;
88+ }
89+
90+ function updateConflict ( id : number , fields : Conflict ) {
91+ setAllConflicts ( ( prev ) => {
92+ const updatedConflicts = [ ...prev ] ;
93+ updatedConflicts [ id ] = fields ;
94+ return updatedConflicts ;
95+ } ) ;
7396 }
7497
75- function addEntry ( entry : UpdateData ) {
76- console . log ( "entry" , entry ) ;
98+ function updateEntry ( id : number , value : FullDataType ) {
7799 setTableEntries ( ( prev ) => {
78- const newEntry : UpdateData = {
100+ const updatedEntries = [ ...prev ] ;
101+ updatedEntries [ id ] = value ;
102+ return updatedEntries ;
103+ } ) ;
104+ }
105+
106+ function addEntry ( entry : FullDataType ) {
107+ setTableEntries ( ( prev ) => {
108+ const newEntry : FullDataType = {
79109 ...entry ,
80110 } ;
81111
@@ -84,12 +114,54 @@ export const TableDataFormProvider = ({
84114 console . log ( "tableEntries" , tableEntries ) ;
85115 }
86116
117+ function removePass ( id : number ) {
118+ const updatedPasses : GPTResponse [ ] = [ ] ;
119+ for ( let i = 0 ; i < initialGPTPasses . length ; i ++ ) {
120+ if ( i !== id ) {
121+ updatedPasses . push ( initialGPTPasses [ i ] ) ;
122+ }
123+ }
124+ return updatedPasses ;
125+ }
126+
87127 function removeEntry ( id : number ) {
88- setTableEntries ( ( prev ) => prev . filter ( ( entry ) => entry . ROWID !== id ) ) ;
128+ const newEntries = tableEntries . filter (
129+ ( entry ) => tableEntries [ id ] !== entry
130+ ) ;
131+ setTableEntries ( newEntries ) ;
132+ }
133+
134+ function setRedConflict ( id : number , fields : string [ ] ) {
135+ if ( ! redConflicts . find ( ( conflict ) => conflict . id === id ) ) {
136+ setRedConflicts ( ( prev ) => {
137+ const newConflict : RedConflicts = {
138+ id : id ,
139+ fields : [ ...fields ] ,
140+ } ;
141+ return [ ...prev , newConflict ] ;
142+ } ) ;
143+ } else {
144+ setRedConflicts ( ( prev ) => {
145+ const newConflicts = prev . map ( ( conflict ) => {
146+ if ( conflict . id === id ) {
147+ return {
148+ id : id ,
149+ fields : [ ...fields ] ,
150+ } ;
151+ }
152+ return conflict ;
153+ } ) ;
154+ return newConflicts . filter ( ( conflict ) => conflict . fields . length > 0 ) ;
155+ } ) ;
156+ }
89157 }
90158
91- function retrieveEntry ( id : number ) {
92- return tableEntries . find ( ( entry ) => entry . ROWID === id ) ;
159+ function removeRedConflict ( id : number ) {
160+ setRedConflicts ( ( prev ) => {
161+ const newConflicts = prev . filter ( ( conflict ) => conflict . id !== id ) ;
162+ console . log ( "newConflicts" , newConflicts ) ;
163+ return newConflicts ;
164+ } ) ;
93165 }
94166
95167 return (
@@ -98,11 +170,17 @@ export const TableDataFormProvider = ({
98170 initialGPTPasses,
99171 setInitialGPTPasses,
100172 tableEntries,
101- updateEntry,
102173 addEntry,
174+ removePass,
175+ updateEntry,
176+ redConflicts,
177+ setRedConflict,
178+ removeRedConflict,
103179 removeEntry,
104- retrieveEntry,
105- updateEntry2,
180+ allConflicts,
181+ addConflict,
182+ removeConflict,
183+ updateConflict,
106184 } }
107185 >
108186 { children }
0 commit comments