Spreadsheet import front module (#2862)

* Spreadsheet import front module

Co-authored-by: v1b3m <vibenjamin6@gmail.com>
Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br>
Co-authored-by: Rafael Toledo <87545086+Toledodev@users.noreply.github.com>

* Automatically update table

Co-authored-by: v1b3m <vibenjamin6@gmail.com>
Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br>
Co-authored-by: Rafael Toledo <87545086+Toledodev@users.noreply.github.com>

* Add company import

Co-authored-by: v1b3m <vibenjamin6@gmail.com>
Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br>
Co-authored-by: Rafael Toledo <87545086+Toledodev@users.noreply.github.com>

* Fixes

* Hide import options on custom objects

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: v1b3m <vibenjamin6@gmail.com>
Co-authored-by: Toledodev <rafael.toledo@engenharia.ufjf.br>
Co-authored-by: Rafael Toledo <87545086+Toledodev@users.noreply.github.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
gitstart-twenty
2023-12-09 15:46:01 +05:45
committed by GitHub
parent 7c40dc7b81
commit 306344a190
9 changed files with 275 additions and 51 deletions

View File

@ -1,5 +1,10 @@
import { v4 } from 'uuid';
import { useCreateManyRecords } from '@/object-record/hooks/useCreateManyRecords';
import { Person } from '@/people/types/Person';
import { useSpreadsheetImport } from '@/spreadsheet-import/hooks/useSpreadsheetImport';
import { SpreadsheetOptions } from '@/spreadsheet-import/types';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { fieldsForPerson } from '../utils/fieldsForPerson';
@ -7,6 +12,11 @@ export type FieldPersonMapping = (typeof fieldsForPerson)[number]['key'];
export const useSpreadsheetPersonImport = () => {
const { openSpreadsheetImport } = useSpreadsheetImport<FieldPersonMapping>();
const { enqueueSnackBar } = useSnackBar();
const { createManyRecords: createManyPeople } = useCreateManyRecords<Person>({
objectNameSingular: 'person',
});
const openPersonSpreadsheetImport = (
options?: Omit<
@ -16,35 +26,43 @@ export const useSpreadsheetPersonImport = () => {
) => {
openSpreadsheetImport({
...options,
onSubmit: async (_data) => {
onSubmit: async (data) => {
// TODO: Add better type checking in spreadsheet import later
// const createInputs = data.validData.map((person) => ({
// id: uuidv4(),
// firstName: person.firstName as string | undefined,
// lastName: person.lastName as string | undefined,
// email: person.email as string | undefined,
// linkedinUrl: person.linkedinUrl as string | undefined,
// xUrl: person.xUrl as string | undefined,
// jobTitle: person.jobTitle as string | undefined,
// phone: person.phone as string | undefined,
// city: person.city as string | undefined,
// }));
// TODO : abstract this part for any object
// try {
// const result = await createManyPerson({
// variables: {
// data: createInputs,
// },
// refetchQueries: 'active',
// });
// if (result.errors) {
// throw result.errors;
// }
// } catch (error: any) {
// enqueueSnackBar(error?.message || 'Something went wrong', {
// variant: 'error',
// });
// }
const createInputs = data.validData.map((person) => ({
id: v4(),
name: {
firstName: person.firstName as string | undefined,
lastName: person.lastName as string | undefined,
},
email: person.email as string | undefined,
...(person.linkedinUrl
? {
linkedinLink: {
label: 'linkedinUrl',
url: person.linkedinUrl as string | undefined,
},
}
: {}),
...(person.xUrl
? {
xLink: {
label: 'xUrl',
url: person.xUrl as string | undefined,
},
}
: {}),
jobTitle: person.jobTitle as string | undefined,
phone: person.phone as string | undefined,
city: person.city as string | undefined,
}));
// TODO: abstract this part for any object
try {
await createManyPeople(createInputs);
} catch (error: any) {
enqueueSnackBar(error?.message || 'Something went wrong', {
variant: 'error',
});
}
},
fields: fieldsForPerson,
});