UNPKG

sccoreui

Version:

ui-sccore

192 lines (191 loc) 9.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FeatureContext = void 0; const tslib_1 = require("tslib"); const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const helper_1 = require("./helper"); const hooks_1 = require("primereact/hooks"); const constants_1 = tslib_1.__importDefault(require("./constants")); exports.FeatureContext = (0, react_1.createContext)(null); function MyProvider({ children, value }) { const { featureDetails, setFeatureDetails, gridData, callGrid, totalRecords, initialFeature, defaultFilters, defaultSearchText, defaultSort, createView, enableViewCreate, filterModelText, sortModelText, recordDetailModelText, sidePanelText, sortOptions, filterConditions, clearFilters, onFiltersCleared, setGridData, gridApi, updateColumnsForGrid, enableManageColumnsCallback, columnToRender, selectedGroup, setSelectedGroup, initialCheckBoxData, intialColumns, setIntialColumns, rowModelType, quickSearch, enableAdvancedFilter, conditionsToDisplay, gridViewFun, gridViewData, setGridViewData, gridView, serverSideSelectRow, defaultViewName, isDataLoading, // dynamicText renderSelectField, renderMultiSelectField, } = value; // States for sort const [columnData, setColumnData] = (0, react_1.useState)(gridData === null || gridData === void 0 ? void 0 : gridData.columnData); (0, react_1.useEffect)(() => { if (gridData === null || gridData === void 0 ? void 0 : gridData.columnData) { setColumnData(gridData.columnData); } }, [gridData === null || gridData === void 0 ? void 0 : gridData.columnData]); const [inputValue, deboucedValue, setInputValue] = (0, hooks_1.useDebounce)(defaultSearchText || "", 500); const [sortValue, setSortValue] = (0, react_1.useState)({}); const [sortBy, setSortBy] = (0, react_1.useState)({}); const [isOverlayOpened, setIsOverlayOpened] = (0, react_1.useState)(false); const [viewName, setViewName] = (0, react_1.useState)(defaultViewName || ""); // States for filter const [queries, setQueries] = (0, react_1.useState)(() => { var _a; const length = ((_a = featureDetails === null || featureDetails === void 0 ? void 0 : featureDetails.filterQueries) === null || _a === void 0 ? void 0 : _a.length) || 0; // Returns based on length of filterQueries present return length === 0 ? [0] : Array.from({ length }, (_, index) => index); }); const conditionTypes = filterConditions ? filterConditions : [ { id: 1, label: "AND" }, { id: 2, label: "OR" }, ]; const [conditionType, setConditionType] = (0, react_1.useState)((defaultFilters === null || defaultFilters === void 0 ? void 0 : defaultFilters.logicalOperator) ? conditionTypes.find((item) => item.id === (defaultFilters === null || defaultFilters === void 0 ? void 0 : defaultFilters.logicalOperator)) : conditionTypes[0]); const [globalFilters, setGlobalFilters] = (0, react_1.useState)([]); const [showAsSave, setShowAsSave] = (0, react_1.useState)(false); // Function call on click to refresh const removeFeaturesAndRefresh = () => { const emptyFeatures = initialFeature; // Remove stored features setFeatureDetails(emptyFeatures); // Remove filter setQueries([0]); // Remove sort setSortBy({}); setSortValue({}); setInputValue(""); callGrid(emptyFeatures); }; /** * Transform and set default filters to globalFilters state * Handles both API output format and internal format: * - API format: { selectedColumn: { code: {...} }, selectedOperation: 1, value, logicalOperator } * - Internal format: { columnName: {...}, condition: {...}, value, logicalOperator } */ (0, react_1.useEffect)(() => { if (defaultFilters.length) { const filtersToAdd = defaultFilters.map((filter) => { var _a, _b, _c; // Extract column data from either format const columnName = ((_a = filter.selectedColumn) === null || _a === void 0 ? void 0 : _a.code) || filter.columnName; // Extract condition - can be a number or object const conditionValue = (_b = filter.selectedOperation) !== null && _b !== void 0 ? _b : filter.condition; const condition = typeof conditionValue === 'object' ? conditionValue : constants_1.default.conditionsList.find((c) => c.value === conditionValue); return { columnName, condition, value: (0, helper_1.parseIfNeeded)(filter.value), id: filter.id || Math.random().toString(), isActive: (_c = filter.isActive) !== null && _c !== void 0 ? _c : true, logicalOperator: filter.logicalOperator, }; }); setGlobalFilters(filtersToAdd); } else { // Clear filters when switching to a view with no filters (e.g. "All" view) setGlobalFilters([]); } }, [defaultFilters]); /** * Transform and set default sort to sortValue and sortBy states * Handles API format: { direction: 1|2, propertyName: "fieldName" } * - direction: 1 = ascending, 2 = descending * - propertyName: field name to sort by */ (0, react_1.useEffect)(() => { if (defaultSort && defaultSort.propertyName && defaultSort.direction) { // Find matching column from columnData based on propertyName const matchingColumn = columnData === null || columnData === void 0 ? void 0 : columnData.find((col) => col.field === defaultSort.propertyName || col.fieldKey === defaultSort.propertyName || col.headerName === defaultSort.propertyName); if (matchingColumn) { setSortValue(matchingColumn); // Find matching sort option based on direction and dataType const matchingSortOption = sortOptions === null || sortOptions === void 0 ? void 0 : sortOptions.find((opt) => opt.sortId === defaultSort.direction && opt.dataType === matchingColumn.dataType); if (matchingSortOption) { setSortBy(matchingSortOption); } } } }, [defaultSort, columnData, sortOptions]); // Sync search input when defaultSearchText changes (e.g. switching saved views) (0, react_1.useEffect)(() => { setInputValue(defaultSearchText || ""); }, [defaultSearchText]); // Update viewName when defaultViewName changes (0, react_1.useEffect)(() => { if (defaultViewName) { setViewName(defaultViewName); } }, [defaultViewName]); // Empty filters and call the grid (0, react_1.useEffect)(() => { // Only clear if clearFilters is explicitly true (not just truthy like []) if (clearFilters === true) { let currentFeature = featureDetails; currentFeature.filterQueries = []; setSelectedGroup([]); setFeatureDetails(Object.assign(Object.assign({}, featureDetails), { checkBoxSelection: initialCheckBoxData })); setGlobalFilters([]); callGrid(currentFeature); } }, [clearFilters]); return ((0, jsx_runtime_1.jsx)(exports.FeatureContext.Provider, Object.assign({ value: { sortValue, setSortValue, sortBy, setSortBy, isOverlayOpened, setIsOverlayOpened, queries, setQueries, featureDetails, setFeatureDetails, columnData, callGrid, removeFeaturesAndRefresh, totalRecords, conditionTypes, conditionType, setConditionType, globalFilters, setGlobalFilters, showAsSave, setShowAsSave, setViewName, viewName, createView, enableViewCreate, filterModelText, sortModelText, recordDetailModelText, sidePanelText, sortOptions, setGridData, gridData, gridApi, updateColumnsForGrid, enableManageColumnsCallback, columnToRender, selectedGroup, setSelectedGroup, initialCheckBoxData, intialColumns, setIntialColumns, rowModelType, quickSearch, enableAdvancedFilter, conditionsToDisplay, gridViewFun, gridViewData, setGridViewData, gridView, inputValue, deboucedValue, setInputValue, serverSideSelectRow, isDataLoading, renderSelectField, renderMultiSelectField, onFiltersCleared, } }, { children: children }))); } exports.default = MyProvider;