diff --git a/package.json b/package.json index 8ffd372..3cf7568 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "@auth0/auth0-react": "1.10.2", "@emotion/react": "11.7.1", "@emotion/styled": "11.6.0", - "@kingsrook/qqq-frontend-core": "1.0.54", + "@kingsrook/qqq-frontend-core": "1.0.55", "@mui/icons-material": "5.4.1", "@mui/material": "5.11.1", "@mui/styles": "5.11.1", diff --git a/src/qqq/components/forms/DynamicSelect.tsx b/src/qqq/components/forms/DynamicSelect.tsx index a562b64..4ac4d2d 100644 --- a/src/qqq/components/forms/DynamicSelect.tsx +++ b/src/qqq/components/forms/DynamicSelect.tsx @@ -48,6 +48,7 @@ interface Props isMultiple?: boolean; bulkEditMode?: boolean; bulkEditSwitchChangeHandler?: any; + otherValues?: Map; } DynamicSelect.defaultProps = { @@ -61,6 +62,7 @@ DynamicSelect.defaultProps = { isEditable: true, isMultiple: false, bulkEditMode: false, + otherValues: new Map(), bulkEditSwitchChangeHandler: () => { }, @@ -68,7 +70,7 @@ DynamicSelect.defaultProps = { const qController = Client.getInstance(); -function DynamicSelect({tableName, processName, fieldName, fieldLabel, inForm, initialValue, initialDisplayValue, initialValues, onChange, isEditable, isMultiple, bulkEditMode, bulkEditSwitchChangeHandler}: Props) +function DynamicSelect({tableName, processName, fieldName, fieldLabel, inForm, initialValue, initialDisplayValue, initialValues, onChange, isEditable, isMultiple, bulkEditMode, bulkEditSwitchChangeHandler, otherValues}: Props) { const [ open, setOpen ] = useState(false); const [ options, setOptions ] = useState([]); @@ -112,7 +114,7 @@ function DynamicSelect({tableName, processName, fieldName, fieldLabel, inForm, i (async () => { // console.log(`doing a search with ${searchTerm}`); - const results: QPossibleValue[] = await qController.possibleValues(tableName, processName, fieldName, searchTerm ?? ""); + const results: QPossibleValue[] = await qController.possibleValues(tableName, processName, fieldName, searchTerm ?? "", null, otherValues); if(tableMetaData == null && tableName) { @@ -237,8 +239,6 @@ function DynamicSelect({tableName, processName, fieldName, fieldLabel, inForm, i bulkEditSwitchChangeHandler(fieldName, newSwitchValue); }; - console.log("multiple? " + isMultiple); - const autocomplete = ( { - if(formFields[key].possibleValueProps && processValues[key]) + if(formFields[key].possibleValueProps) { - formFields[key].possibleValueProps.initialDisplayValue = processValues[key] + if(processValues[key]) + { + formFields[key].possibleValueProps.initialDisplayValue = processValues[key] + } + + formFields[key].possibleValueProps.otherValues = formFields[key].possibleValueProps.otherValues ?? new Map(); + Object.keys(formFields).forEach((otherKey) => + { + formFields[key].possibleValueProps.otherValues.set(otherKey, processValues[otherKey]); + }); } }) } @@ -721,6 +731,35 @@ function ProcessRun({process, table, defaultProcessValues, isModal, isWidget, is let formValidations: any = {}; let initialValues: any = {}; + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // define an inner function here, for adding more fields to the form, if any components have form fields built into them // + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + const addField = (fieldName: string, dynamicFormValue: any, initialValue: any, validation: any) => + { + dynamicFormFields[fieldName] = dynamicFormValue; + initialValues[fieldName] = initialValue; + formValidations[fieldName] = validation; + }; + + if(tableMetaData) + { + console.log("Adding table name field... ?", tableMetaData.name); + addField("tableName", {type: "hidden", omitFromQDynamicForm: true}, tableMetaData.name, null); + } + + if (doesStepHaveComponent(activeStep, QComponentType.VALIDATION_REVIEW_SCREEN)) + { + addField("doFullValidation", {type: "radio"}, "true", null); + setOverrideOnLastStep(false); + } + + if (doesStepHaveComponent(activeStep, QComponentType.GOOGLE_DRIVE_SELECT_FOLDER)) + { + addField("googleDriveAccessToken", {type: "hidden", omitFromQDynamicForm: true}, "", null); + addField("googleDriveFolderId", {type: "hidden", omitFromQDynamicForm: true}, "", null); + addField("googleDriveFolderName", {type: "hidden", omitFromQDynamicForm: true}, "", null); + } + /////////////////////////////////////////////////// // if this step has form fields, set up the form // /////////////////////////////////////////////////// @@ -750,6 +789,21 @@ function ProcessRun({process, table, defaultProcessValues, isModal, isWidget, is initialValues[field.name] = processValues[field.name]; }); + //////////////////////////////////////////////////////////////////////////////////// + // set initial values in the possible value fields as otherValues (for filtering) // + //////////////////////////////////////////////////////////////////////////////////// + Object.keys(dynamicFormFields).forEach((key: any) => + { + if(dynamicFormFields[key].possibleValueProps) + { + dynamicFormFields[key].possibleValueProps.otherValues = dynamicFormFields[key].possibleValueProps.otherValues ?? new Map(); + Object.keys(initialValues).forEach((ivKey: any) => + { + dynamicFormFields[key].possibleValueProps.otherValues.set(ivKey, initialValues[ivKey]); + }) + } + }) + //////////////////////////////////////////////////// // disable all fields if this is a bulk edit form // //////////////////////////////////////////////////// @@ -766,35 +820,6 @@ function ProcessRun({process, table, defaultProcessValues, isModal, isWidget, is } } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // define an inner function here, for adding more fields to the form, if any components have form fields built into them // - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - const addField = (fieldName: string, dynamicFormValue: any, initialValue: any, validation: any) => - { - dynamicFormFields[fieldName] = dynamicFormValue; - initialValues[fieldName] = initialValue; - formValidations[fieldName] = validation; - }; - - if(tableMetaData) - { - console.log("Adding table name field... ?", tableMetaData.name); - addField("tableName", {type: "hidden", omitFromQDynamicForm: true}, tableMetaData.name, null); - } - - if (doesStepHaveComponent(activeStep, QComponentType.VALIDATION_REVIEW_SCREEN)) - { - addField("doFullValidation", {type: "radio"}, "true", null); - setOverrideOnLastStep(false); - } - - if (doesStepHaveComponent(activeStep, QComponentType.GOOGLE_DRIVE_SELECT_FOLDER)) - { - addField("googleDriveAccessToken", {type: "hidden", omitFromQDynamicForm: true}, "", null); - addField("googleDriveFolderId", {type: "hidden", omitFromQDynamicForm: true}, "", null); - addField("googleDriveFolderName", {type: "hidden", omitFromQDynamicForm: true}, "", null); - } - if (Object.keys(dynamicFormFields).length > 0) { /////////////////////////////////////////// diff --git a/src/qqq/pages/records/query/RecordQuery.tsx b/src/qqq/pages/records/query/RecordQuery.tsx index 4e5f042..d7aa30c 100644 --- a/src/qqq/pages/records/query/RecordQuery.tsx +++ b/src/qqq/pages/records/query/RecordQuery.tsx @@ -1135,11 +1135,8 @@ function RecordQuery({table, launchProcess}: Props): JSX.Element ); } - const runRecordScriptProcess = metaData?.processes.get("runRecordScript"); - const pushDividerIfNeeded = (menuItems: JSX.Element[]) => { - console.log("Type: " + menuItems[menuItems.length - 1]); if(menuItems.length > 0) { menuItems.push(); diff --git a/src/qqq/styles/qqq-override-styles.css b/src/qqq/styles/qqq-override-styles.css index ea147c5..71ee9cb 100644 --- a/src/qqq/styles/qqq-override-styles.css +++ b/src/qqq/styles/qqq-override-styles.css @@ -357,3 +357,13 @@ input[type="search"]::-webkit-search-results-decoration { display: none; } color: rgb(123, 128, 154); font-weight: 400; } + +.fullScreenWidget +{ + position: fixed !important; + left: 30px !important; + width: calc(100vw - 60px) !important; + top: 30px !important; + height: calc(100vh - 60px) !important; + z-index: 1300 !important; +} \ No newline at end of file