[DEV] test 2

This commit is contained in:
Edouard DUPIN 2024-09-01 16:08:15 +02:00
parent 147264eb7f
commit 0687369164

View File

@ -20,7 +20,6 @@ import { useNavigate, useParams } from 'react-router-dom';
import { Album, Track } from '@/back-api'; import { Album, Track } from '@/back-api';
import { FormGroup } from '@/components/form/FormGroup'; import { FormGroup } from '@/components/form/FormGroup';
import { useFormidable } from '@/components/form/Formidable';
import { SelectMultiple } from '@/components/form/SelectMultiple'; import { SelectMultiple } from '@/components/form/SelectMultiple';
import { SelectSingle } from '@/components/form/SelectSingle'; import { SelectSingle } from '@/components/form/SelectSingle';
import { useOrderedAlbums } from '@/service/Album'; import { useOrderedAlbums } from '@/service/Album';
@ -31,6 +30,25 @@ import { isNullOrUndefined } from '@/utils/validator';
export type TrackEditPopUpProps = {}; export type TrackEditPopUpProps = {};
const getDifferences = (obj1: any, obj2: any): { [key: string]: boolean } => {
const result: { [key: string]: boolean } = {};
for (const key in obj1) {
if (obj1.hasOwnProperty(key)) {
result[key] = obj1[key] !== obj2[key];
}
}
return result;
};
const hasAnyTrue = (obj: { [key: string]: boolean }): boolean => {
for (const key in obj) {
if (obj.hasOwnProperty(key) && obj[key] === true) {
return true;
}
}
return false;
};
export const TrackEditPopUp = ({}: TrackEditPopUpProps) => { export const TrackEditPopUp = ({}: TrackEditPopUpProps) => {
const { trackId } = useParams(); const { trackId } = useParams();
const { dataGenders } = useOrderedGenders(undefined); const { dataGenders } = useOrderedGenders(undefined);
@ -51,15 +69,65 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => {
}; };
const initialRef = useRef(null); const initialRef = useRef(null);
const finalRef = useRef(null); const finalRef = useRef(null);
const form = useFormidable<Track>({ const form = useForm<Track>({
//onSubmit, onSubmit,
//onValuesChange, onValuesChange,
initialValues: dataTrack, initialValues: { ...dataTrack },
//onValid: () => console.log('onValid'), onValid: () => console.log('onValid'),
//onInvalid: () => console.log('onInvalid'), onInvalid: () => console.log('onInvalid'),
}); });
const formValues = useFormFields({
connect: form,
selector: (field) => field.value,
});
/*
const formValues = useFormFields({
connect: form,
fields: ['genderId'] as const,
selector: 'value',
});
*/
console.log(`dataTrack : ${JSON.stringify(dataTrack, null, 2)}`);
console.log(`Redraw : ${JSON.stringify(formValues, null, 2)}`);
const [newData, setNewData] = useState<Track>();
const [changeData, setChangeData] = useState<{ [key: string]: boolean }>();
const [changeOneData, setChangeOneData] = useState<boolean>(true);
// initialize value when ready
useEffect(() => {
setNewData(dataTrack);
}, [dataTrack, setNewData, setChangeData]);
useEffect(() => {
if (!newData) {
return;
}
const ret = getDifferences(dataTrack, newData);
setChangeData(ret);
///////////////////////setChangeOneData(hasAnyTrue(ret));
console.log(
`ChangeData=${JSON.stringify(ret, null, 2)} ChangeOneData=${hasAnyTrue(ret)}`
);
}, [dataTrack, newData, setChangeData, setChangeOneData]);
// const onChangeValue = (key: string, data) => {
// console.log(`[${key}] data: ${data}`);
// setNewData((previous) => {
// if (previous === undefined) {
// return previous;
// }
// if (previous[key] === data) {
// return previous;
// }
// const tmp = { ...previous };
// tmp[key] = data;
// console.log(`data = ${JSON.stringify(tmp, null, 2)}`);
// return tmp;
// });
// };
return ( return (
<Formiz connect={form} autoForm>
<form noValidate onSubmit={form.submit}>
<Modal <Modal
initialFocusRef={initialRef} initialFocusRef={initialRef}
finalFocusRef={finalRef} finalFocusRef={finalRef}
@ -77,7 +145,7 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => {
<FormLabel>Title</FormLabel> <FormLabel>Title</FormLabel>
<Input <Input
ref={initialRef} ref={initialRef}
value={form.values.name} value={formValues.name}
onChange={(e) => form.setValues({ name: e.target.value })} onChange={(e) => form.setValues({ name: e.target.value })}
/> />
</FormGroup> </FormGroup>
@ -85,23 +153,31 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => {
<FormGroup> <FormGroup>
<label>Description</label> <label>Description</label>
<Textarea <Textarea
value={form.values.description} value={formValues.description}
onChange={(e) => form.setValues({ description: e.target.value })} onChange={(e) =>
form.setValues({ description: e.target.value })
}
/> />
</FormGroup> </FormGroup>
<FormGroup> <FormGroup>
<label>Gender</label> <label>Gender</label>
<SelectSingle <SelectSingle
value={form.values.genderId} value={formValues.genderId}
options={dataGenders} options={dataGenders}
onChange={(value) => form.setValues({ genderId: value })} onChange={(value) => {
form.setValues({ genderId: value });
console.log(`event change value: ${value}`);
console.log(
`values: ${JSON.stringify(formValues, null, 2)}`
);
}}
keyValue="name" keyValue="name"
/> />
</FormGroup> </FormGroup>
<FormGroup> <FormGroup>
<label>Artist(s)</label> <label>Artist(s)</label>
<SelectMultiple <SelectMultiple
values={form.values.artists} values={formValues.artists}
options={dataArtist} options={dataArtist}
onChange={(value) => form.setValues({ artists: value })} onChange={(value) => form.setValues({ artists: value })}
keyValue="name" keyValue="name"
@ -110,7 +186,7 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => {
<FormGroup> <FormGroup>
<label>Album</label> <label>Album</label>
<SelectSingle <SelectSingle
value={form.values.albumId} value={formValues.albumId}
options={dataAlbums} options={dataAlbums}
onChange={(value) => form.setValues({ albumId: value })} onChange={(value) => form.setValues({ albumId: value })}
keyValue="name" keyValue="name"
@ -119,13 +195,13 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => {
<FormControl> <FormControl>
<FormLabel>track n°</FormLabel> <FormLabel>track n°</FormLabel>
<NumberInput <NumberInput
value={form.values.track} value={formValues.track}
onChange={(value) => form.setValues({ track: value })} onChange={(value) => form.setValues({ track: value })}
/> />
</FormControl> </FormControl>
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
{form.isFormModified && ( {changeOneData && (
<Button colorScheme="blue" mr={3} type="submit"> <Button colorScheme="blue" mr={3} type="submit">
Save Save
</Button> </Button>
@ -134,5 +210,7 @@ export const TrackEditPopUp = ({}: TrackEditPopUpProps) => {
</ModalFooter> </ModalFooter>
</ModalContent> </ModalContent>
</Modal> </Modal>
</form>
</Formiz>
); );
}; };