UNPKG

drf-react-by-schema

Version:

Components and Tools for building a React App having Django Rest Framework (DRF) as server

171 lines (170 loc) 6.88 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.useDataGridActions = void 0; const axios_1 = __importDefault(require("axios")); const utils_1 = require("../../../utils"); const APIWrapperContext_1 = require("../../../context/APIWrapperContext"); const useDataGridActions = ({ apiRef, model, schema, emptyItem, dataGrid, setDataGrid, setSelectionModel, setSelectionModelIds, setSnackBar, setDataGridLoading, onDataChange, handleStartEditing, tableAutoHeight, indexField, defaultValues, isRowEditing, }) => { const { rawDeleteData, rawUpdateDataBySchema } = (0, APIWrapperContext_1.useAPIWrapper)(); const handleAddItems = (n = 1) => { const newRows = []; for (let i = 0; i < n; i++) { const id = (0, utils_1.getTmpId)(); newRows.push(Object.assign(Object.assign(Object.assign({}, emptyItem), defaultValues), { id })); } const newData = tableAutoHeight ? [...dataGrid.data, ...newRows] : [...newRows, ...dataGrid.data]; if (onDataChange) { onDataChange(newData); } setDataGrid({ data: newData, }); setTimeout(() => { let fieldToFocus = indexField; if (!fieldToFocus) { const visibleColumns = apiRef.current.getAllColumns(); const firstEditableCol = visibleColumns.find((col) => col.editable && col.field !== 'actions'); fieldToFocus = firstEditableCol === null || firstEditableCol === void 0 ? void 0 : firstEditableCol.field; } apiRef.current.startRowEditMode({ id: newRows[0].id, fieldToFocus }); handleStartEditing(newRows[0].id); // apiRef.current.setCellFocus(newRows[0].id, fieldToFocus); if (!tableAutoHeight) { apiRef.current.scrollToIndexes({ rowIndex: 0 }); } }, 100); }; const handleAddItem = () => { if (isRowEditing) { if ((0, utils_1.isTmpId)(isRowEditing)) { setSnackBar({ open: true, severity: 'info', msg: 'Adicione uma linha por vez', }); return; } apiRef.current.stopRowEditMode({ id: isRowEditing }); } const id = (0, utils_1.getTmpId)(); const newRow = Object.assign(Object.assign(Object.assign({}, emptyItem), defaultValues), { id }); const newData = tableAutoHeight ? [...dataGrid.data, newRow] : [newRow, ...dataGrid.data]; if (onDataChange) { onDataChange(newData); } setDataGrid({ data: newData, }); setTimeout(() => { let fieldToFocus = indexField; if (!fieldToFocus) { const visibleColumns = apiRef.current.getAllColumns(); const firstEditableCol = visibleColumns.find((col) => col.editable && col.field !== 'actions'); fieldToFocus = firstEditableCol === null || firstEditableCol === void 0 ? void 0 : firstEditableCol.field; } apiRef.current.startRowEditMode({ id, fieldToFocus }); handleStartEditing(id); // apiRef.current.setCellFocus(id, fieldToFocus); if (!tableAutoHeight) { apiRef.current.scrollToIndexes({ rowIndex: 0 }); } }, 100); }; const bulkUpdateData = (newData) => __awaiter(void 0, void 0, void 0, function* () { const promises = []; const ids = []; newData.map((item) => { promises.push(rawUpdateDataBySchema({ model, modelObjectId: item.id, data: item, schema, })); ids.push(item.id); }); const results = yield Promise.all(promises); setSelectionModel([]); setSelectionModelIds([]); const updatedData = dataGrid.data.map((item) => { const index = ids.indexOf(item.id); return index === -1 ? item : newData[index]; }); if (onDataChange) { onDataChange(updatedData); } setDataGrid({ data: updatedData, }); setSnackBar({ open: true, severity: 'success', msg: 'Alterações salvas com sucesso', }); return results.map((result, index) => { return { id: ids[index], success: !axios_1.default.isAxiosError(result), }; }); }); const bulkDeleteData = (ids) => __awaiter(void 0, void 0, void 0, function* () { const promises = []; ids.map((id) => { promises.push(rawDeleteData(model, id)); }); setDataGridLoading(true); const results = yield Promise.all(promises); setSelectionModel([]); setSelectionModelIds([]); const newData = dataGrid.data.filter(({ id }) => !ids.includes(id)); if (onDataChange) { onDataChange(newData); } setDataGrid({ data: newData, }); setDataGridLoading(false); setSnackBar({ open: true, severity: 'success', msg: 'Itens apagados com sucesso', }); return results.map((result, index) => { return { id: ids[index], success: result === true, }; }); }); const bulkCreateData = (ids) => __awaiter(void 0, void 0, void 0, function* () { handleAddItems(ids.length); setSelectionModel([]); setSelectionModelIds([]); setSnackBar({ open: true, severity: 'success', msg: 'Linhas adicionadas com sucesso', }); }); return { handleAddItem, bulkUpdateData, bulkDeleteData, bulkCreateData, }; }; exports.useDataGridActions = useDataGridActions;