{"version":3,"sources":["webpack:///src/components/Table copy.vue","webpack:///./src/components/Table copy.vue?730e","webpack:///./src/components/Table copy.vue?3362","webpack:///./src/components/Table copy.vue?14c4","webpack:///./src/components/Table copy.vue"],"names":["name","props","data_object","Object","vModel","Array","editable","type","default","table_title","String","tableName","addButtonCaption","addButtonKey","newItemTitle","new_data","rowClick","Function","linkClick","selectSwitch","Boolean","editData","getTotal","rowIcons","parentKey","allParentKeys","toolBarControls","editControls","toolBarExpandedControls","itemsPerPage","Number","itemSelected","toolbarRight","hasSearch","remoteSearch","remoteSearchFields","numericFields","searchLen","beforeSubmit","afterSubmit","beforeSave","afterSave","onValueChange","doSubmit","dList","dListData","dExcel","fixedHeader","hideTitle","tableHeight","hideFooter","hideHeader","allExpanded","disablePagination","noServerPagination","mobileBreakpoint","alwaysUpdate","allEditable","directEdit","getTable","ajustTableSchema","editedItem","onRowUpdate","beforeAddData","onLoad","onMount","onDataChange","getFreshData","excelColumnWidth","formModel","parentModel","fields_excluded","fields_included","expandedIndexes","editRow","editRecord","initialData","tblKey","groupName","expandable","additionalData","k","expansionColumns","insertable","noDelete","noSave","disabledProperty","disabledValue","parObject","parTable","parentObject","defaultModel","isDraggable","disableSort","singleSelect","noToolBar","skipRecalculation","saveButtonCaption","noAdditionalMenu","assistant_instructions","link","noInitEdit","isGoToButton","goToButtonText","goToButtonAction","onDataReceived","getRowClass","coloredFields","dialogFields","getItemColor","colorProperty","filterTabs","filterTabsFn","noTabs","noExcel","filterCondition","searchableColumns","focusOnInsert","showGroupBy","filterTable","filter","cssClass","selectedId","mData","serverPagination","sortBy","customSort","customSortItems","sortDesc","onRowDragDrop","dropItem","noAlert","customFilter","refreshAfterSubmit","noCache","showFilterCombo","filterComboLabel","hideAllTabFilter","updateNestedArray","hasAdvancedSearch","noRefreshAfterUpload","noRefreshButton","noRefreshButtonTitle","limitTabsToData","limitObject","actionCommand","editedItemTitle","idField","columnTool","refreshParent","hideTopBar","draggedIndex","dropItemHandling","droppedObjectsSortProperty","defaultTabCaption","defaultTabColor","mobileItemTemplate","hideEditedTabs","hideFilterTabs","copyRecords","disableChildEdit","defaultDataFn","groupByItems","noGroups","vBind","readonly","NoFirstRowEditable","minSearchLength","totalFields","validate","noHorizontalScroll","hideScroll","noAddOnAllTab","autoSave","hideAllInCombo","refreshHeadersOnFormChange","parentProperty","noTabSort","defaultDataObject","mobileViewTemplate","addMenuButton","noFullScreen","formMainTab","deleteId","toolBarItemsExcluded","hasParent","getItems","scrollOnNew","searchAfterCompleted","helpText","helpTitle","useTabs","maxRecords","droppedObjects","droppedObjectTemplate","droppedObjectFilterProperty","expandedItemsTitle","dropName","addRecordWithLink","qry","columns","hasAssistant","components","VLoading","VCombo","VFormComponent","DList","DForm","VAccordion","VDateRangePicker","VUpload","USMap","SelectTable","VRadioList","VAddLabor","VCustomButton","VDateTime","VFormCard","VUnitCharge","VAddToTableButton","VTreeInput","VEditor","SendLetter","VTableEditedItem","DataTableRowHandler","VMenuButton","ChangeRates","VLabelButton","VFormToolBar","VDialogTable","VCrew","VTextDialog","VTableSearch","VTakePhoto","VArray","VAiChat","VMobileViewTableTemplate","VPager","draggable","data","lastSavedCustomQry","assistantVBind","hideAssistantsList","hideNewChat","noStreaming","defaultMessage","defaultToolTip","listHeight","assistantModel","myLinkClick","testItems","initialQry","assistantQry","tabQry","searchLabel","tableReady","activeTab","breakpoint","tabFilter","selectDelete","mapDialog","mapDialogWidth","mapDialogHeight","curTable","dialog","successMessage","errorMessage","headers","computedHeaders","selected","table","pagerKey","tableKey","originalRecords","schema","sending","showSelect","search","snack","snackColor","snackText","groupBy","totalKey","formKey","expandedKey","formObject","model","init","isNew","isEditedNew","listKey","excelKey","loading","tooltip","defaultItem","dObject","options","debug","disableAll","autoFoldObjects","editedItemPlaceholder","totals","capitalizable","expanded","expand","transitioned","closeTimeouts","editedClass","newRow","insertedRow","insertNewRow","newRowInserted","observer","rowAdded","expandedObjects","compKey","page","pageCount","currentPage","itemsLength","pageStart","pageStop","editDialog","qryExplanation","newRowId","sortDisabled","allTableExpanded","comboFilterItems","currentFilter","pagination","blankRowModel","filterItems","filterCond","propertyList","addTableKey","dModel","select","editedId","additionalModel","hideControls","customBtnLoading","form","update","add","delete","comboCurrentFilter","showAdvancedSearch","searchModel","xllink","editedTabs","edited","currentForm","childEdited","editedTabsKey","columnId","editTitle","mobileHeaders","copyMenu","duplicateValues","hasUpload","upload","uploadFields","uploadFieldsInitialTitle","itemsPerPageEdited","pager","serverItemsLength","itemsPerPageChanged","editDisablePagination","delBtnKey","toolMenu","filterChanged","toolbarKey","groupByItemsReady","searchDone","toolBarKey","footerKey","serverPaginationDone","doServerPagination","filterComboKey","rowClassFn","specialFields","disableSave","searchTabQuery","tabSearchDialog","tabKey","dialogModel","tableInsertable","keepHeaders","initialHideHeaders","mobileList","menuModel","helpModel","searchMenuModel","searchModelKey","additionalTabs","additionalTab","editMode","insertMode","menuOpen","hasDefaultTab","dropKey","filteredTabModel","searchBarKey","filterModel","isFullScreen","closeMenuOnClick","menuItems","menuButtonKey","sortCriteria","currentSortBy","currentSortDesc","wrapHeight","methods","toggleFullScreen","this","buildSearchQuery","myQry","push","$or","searchConditions","mergeProps","itemTemplate","item","rows","forEach","h","value","customAction","$root","$emit","actionName","obj","console","log","resetColumns","object_name","ids","saveCustomQry","metadata","caption","q","description","table_name","user_id","saveColumns","_id","getColumns","length","c","show","tableMount","that","tableEditRow","window","innerWidth","innerHeight","getFilterParams","$on","d","json","query","itemsCount","loadFromDb","tableTitle","refresh","m","dataChange","func","r","sort","sortTable","response","uploaded","getData","getEditedItem","setTotals","resetForm","doSearch","initEdit","objectName","getModel","edit","refreshTable","doExpand","isExpanded","onInsertControlCreated","toggleFilter","e","preventDefault","validateEntry","setTimeout","validationRules","valid","messages","find","t","id","eval","rule","invalidMessage","v","join","remove","fn","applyRow","fromMenu","validateAndSave","tbl","hideToolBar","hide","onDragOver","event","onDragStart","dataTransfer","setData","JSON","stringify","index","effectAllowed","getDropTargetIndex","targetElement","findIndex","onDropItem","stopPropagation","cont","droppedItem","onDrop","draggableItems","draggableRecordsId","curId","itemIndex","i","splice","draggedItem","customFiltering","restoreSchema","objName","localStorage","getItem","keys","properties","origSchema","addNew","$refs","formReady","save","keepOpen","removeTab","editCurrentRecord","dontUpdateParent","updateParentArray","isArray","disableParentEdit","getPos","invertColor","reset","groupByValue","loadOnDemand","schema_name","qryFn","par","customSorting","items","defaultSort","templatedItems","desc","isDesc","origItem","sortedOriginalItems","includes","getColor","colorCls","cls","field","indexOf","getInvertColor","itemClass","addDynamicClass","color","document","getElementById","className","style","innerHTML","head","appendChild","changeSort","column","descending","onPagination","paginationProperties","perPage","saveOrder","newIndex","movedItem","getParentVBind","getParentSchema","getSchema","prepareEditedField","clearable","getCurrentEditedItem","getDialogType","openDialog","currentItem","getVBind","getReadOnly","readOnlyFormula","inEditedItems","included","selectMe","clearSearch","capitalize","formatDate","resetModel","getGroupName","p","group","defaultName","grName","addModel","template","getAddButton","fromItem","getEditableFields","editableFields","fld","f","prop","cancelEdit","getChipValue","slot","itemText","capitalizeText","getTemplate","ind","isEdtited","isEditedItem","modelFn","exist","n","getCalculatedFields","saveRecord","parent_object","submit","editedIndex","icon","resetValidation","saveFilter","filterName","replaceAll","customFilterData","user_email","$set","custom_filter","cancel","customBtnClick","btn","applyGroupBy","captializedGroupByItems","text","g","duplicate","dValues","split","trim","collection_name","field_name","duplicate_values","original_value","getNumber","sum","getSum","key","calculate","open","ref","$nextTick","firstElement","querySelector","classList","parentTable","left","getBoundingClientRect","documentElement","setProperty","close","editRec","rec","path","tot","defaultValue","doNotSubmit","deleted","d_excel","opt","formOptions","defaultFilteredItem","returnObject","addRowFromButton","specialFunction","addProp","val","updateItem","addRow","checkCustomFunction","scrollToEdited","el","elem","scrollIntoView","behavior","block","removeGroup","$el","click","getDefaults","filteredTabItems","curFilter","navigate","unshift","row","blankRow","defaultFn","rowChanged","resetFocus","currentInput","activeElement","td","closest","tr","tdArray","from","querySelectorAll","indexCol","indexRow","input","focus","error","blankItem","edit_combo","dir","changeFilterTab","ev","onScroll","timeout","clearTimeout","target","scrollTop","toggleGroup","startsWith","openGroup","moveFocus","MutationObserver","rowCount","countVisibleRows","nextCtl","disconnect","clearBtn","getElementsByTagName","observe","body","characterDataOldValue","subtree","childList","characterData","newModel","undefined","childrenPath","children_path","path_ids","add_record_to_table","convertArray","convertedArray","$and","and","totalRecords","per_page","default_model","max_records","sort_desc","Date","additional_data","obj_name","toLowerCase","getObjects","assignId","deleteCustomFilter","$confirm","getGroupBy","buildSortCriteria","map","sortField","getSortBy","newSortBy","getSortDesc","newSortDesc","closeDialog","getField","title","getFieldDisplay","sortedDraggedObjects","sortedObjects","getDefaultDataObject","beforeGetData","getTableProperties","doTabs","getUploadFields","groupExist","hideCtl","hideIf","resetNewRow","selectCtl","a","b","autoAssign","wasAssigned","prefix","isNewGroup","displayGroup","prevGroup","uploadFieldsTitle","initTable","initEdited","total_records","Math","ceil","selRec","getAllEditable","filterHeaders","getDefaultColor","convertAssistantQry","resetAssistantQry","buildCustomQueryPrompt","customInstructions","prompt","$route","params","toString","doTabFilter","sortObjects","filterTabVBind","all_records","permittedQry","store","permittedActions","parse","limitTabs","getFilterCombo","toggleBreakpoint","showComponent","comp","displayIf","getSaveTitle","save_title","getSaveFunction","save_function","incl","updateHeight","getTextDialogIcon","iconFn","default_value","function","ed","outlined","class","deleteCustomQry","ctl","getEditedSchema","get_table","header","hidden","splitTitle","getCurrentDateTime","getCurrentDate","getCurrentUser","userData","email","updateModel","itemExpanded","handleClick","total","object_id","htmlDecode","doc","DOMParser","parseFromString","textContent","curRec","convertDateFormat","portal","portal_id","retValue","sortable","groupable","splitHeader","splitedHeader","splitIndex","noCustomer","originalHeaders","checkHiddenHeaders","dTable","cnt","deleteSelected","replace","delete_object_name","db_name","id_name","additional_delete_objects","highlightClickedRow","expandDataObject","parModel","isExpandRow","getDataObjectFromParent","expandAll","getObject","expandRows","uploadExcel","downloadExcel","record_id","filename","host","excel","getForm","itemName","emitDialogSave","saveFunction","editor","parent","disable","editExist","bodySlots","toggleAllGroups","filterData","getFilterValue","filterProperty","filterValue","active","hideHeaders","renameHeaders","checkTabOptions","dragstart","draggedHeader","drop","fromIndex","toIndex","saveColumnOrder","toggleColumn","updateFilter","valueFn","applyCustomQry","customQry","custom_qry","applyFilter","filterIndex","applyFilterOnEnter","o","updateDisablePagination","updateAdditionalTabs","updateItemsPerPage","updateOriginalRecords","tableIds","remainingRecords","concat","virtualScroll","addDefaultFilter","defaultFilter","addDefaultTab","handleGroupDescChange","getTableTop","top","directives","bind","animation","onUpdate","vnode","child","handle","context","mounted","addEventListener","searchFields","$vuetify","smAndDown","arrive","activated","watch","handler","newValue","inArray","range","dayRangeFilter","minDate","maxDate","dates","dMin","dMax","isString","include","deep","oldValue","tab","searchInput","computed","safeToolBarControls","tableTotal","tblStyle","width","screen","filteredHeaders","filteredItems","searchTrigger","render","_vm","_h","$createElement","_c","_self","attrs","_e","_v","_s","tableHeader","rawName","expression","staticClass","callback","$$v","_l","hideTotal","tag","mdAndUp","scopedSlots","_u","on","_g","$event","_k","keyCode","staticStyle","refInFor","saveFilterMenu","isMobile","_b","customerId","isTablet","onMenu","assign","height","proxy","some","span","noSpan","s","j","isOpen","toggle","domProps","theme","dark","nonUpdatable","noEditDialogButtons","badge","action","commandText","parseFloat","toFixed","staticRenderFns","component","VAlert","VAppBar","VAutocomplete","VBadge","VBtn","VCard","VCardText","VCardTitle","VCheckbox","VChip","VCol","VContainer","VDataTable","VDialog","VEditDialog","VIcon","VLabel","VList","VListItem","VListItemTitle","VMenu","VRow","VSelect","VSnackbar","VSpacer","VSwitch","VTab","VTabs","VTextField","VTextarea","VToolbar","VTooltip"],"mappings":"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","file":"js/chunk-cafb5bde.c4ac8c0d.js","sourcesContent":["<template>\r\n  <div ref=\"parentContainer\">\r\n    <!-- {{ propertyList }} -->\r\n    <!-- assistantQry: {{ assistantQry }}\r\n    <br />\r\n    convertAssistantQry:  -->\r\n    <!-- {{ convertAssistantQry() }} -->\r\n\r\n    <div hidden>\r\n      <v-take-photo></v-take-photo>\r\n    </div>\r\n\r\n    <h3 v-if=\"!hideTitle\">{{ table_title || tableHeader }}</h3>\r\n    <!-- expanded:{{ expanded }} -->\r\n    <!-- defaultModel:{{ defaultModel }} -->\r\n    <v-tabs\r\n      v-if=\"filterItems.length && filterItems.length > 1 && !noTabs && useTabs\"\r\n      v-show=\"!hideFilterTabs\"\r\n      v-model=\"currentFilter\"\r\n      class=\"mt-2 filter-tabs\"\r\n      active-class=\"active-tab\"\r\n      continuous\r\n      grow\r\n      show-arrows\r\n      :key=\"tabKey\"\r\n    >\r\n      <v-tab v-for=\"item in filteredTabItems\" :key=\"item.caption\">\r\n        {{ item.caption }}\r\n      </v-tab>\r\n    </v-tabs>\r\n\r\n    <div :class=\"{ 'full-screen': isFullScreen }\">\r\n      <!-- </v-toolbar> -->\r\n      <!-- <v-label v-if=\"hideTopBar && table_title\">\r\n        {{ table_title }}\r\n      </v-label> -->\r\n      <div class=\"top-bar\">\r\n        <v-component\r\n          :is=\"$vuetify.breakpoint.smAndDown ? 'div' : 'v-toolbar'\"\r\n          v-if=\"!edited && getTotal && !data_object.hideTotal\"\r\n          :class=\"{\r\n            'ml-n0 mr-n0 mb-4': $vuetify.breakpoint.smAndDown,\r\n            'ml-0 mb-0 mr-0': $vuetify.breakpoint.mdAndUp\r\n          }\"\r\n          flat\r\n        >\r\n          <v-spacer\r\n            v-if=\"\r\n              (!edited && !dList && !hideTitle && table_title) || table_title\r\n            \"\r\n          ></v-spacer>\r\n\r\n          <v-spacer\r\n            v-if=\"\r\n              !edited && filterItems && filterItems.length && showFilterCombo\r\n            \"\r\n          ></v-spacer>\r\n\r\n          <v-spacer\r\n            v-if=\"!edited && getTotal && !data_object.hideTotal && !dExcel\"\r\n          ></v-spacer>\r\n          <v-chip\r\n            class=\"mt-n2\"\r\n            ref=\"total\"\r\n            v-if=\"!edited && getTotal && !data_object.hideTotal\"\r\n            elevation-4\r\n          >\r\n            {{ !totals ? \"\" : totals.total.text }}\r\n          </v-chip>\r\n        </v-component>\r\n\r\n        <!-- class=\"header-toolbar ml-0 mt-2 mb-2 pa-2\" -->\r\n\r\n        <v-toolbar\r\n          v-if=\"(!hideTopBar || !noDelete || addButtonCaption) && !hideControls\"\r\n          :key=\"toolbarKey\"\r\n          flat\r\n          class=\"table-toolbar\"\r\n        >\r\n          <v-tooltip v-if=\"!edited && !noDelete && selectDelete\" top>\r\n            <template v-slot:activator=\"{ on }\">\r\n              <v-btn\r\n                :class=\"dExcel ? `ml-2` : `ml-2`\"\r\n                icon\r\n                v-on=\"on\"\r\n                :disabled=\"!selected.length\"\r\n                @click=\"deleteSelected\"\r\n              >\r\n                <v-icon color=\"error\">mdi-delete-sweep</v-icon>\r\n              </v-btn>\r\n            </template>\r\n            <span>Delete Selected</span>\r\n          </v-tooltip>\r\n\r\n          <v-btn\r\n            v-if=\"\r\n              !edited && !noDelete && !readonly && tableReady && table.length\r\n            \"\r\n            :key=\"delBtnKey\"\r\n            class=\"ml-2\"\r\n            icon\r\n            v-on=\"on\"\r\n            @click=\"\r\n              selectDelete = !selectDelete;\r\n              selected = [];\r\n            \"\r\n          >\r\n            <v-icon v-if=\"!selectDelete\" color=\"error\">mdi-minus-circle</v-icon>\r\n\r\n            <v-icon v-if=\"selectDelete\">mdi-cancel</v-icon>\r\n          </v-btn>\r\n\r\n          <v-btn\r\n            class=\"ma-0\"\r\n            v-if=\"\r\n              addButtonCaption &&\r\n                !tableInsertable &&\r\n                !edited &&\r\n                !readonly &&\r\n                !addMenuButton\r\n            \"\r\n            color=\"info\"\r\n            @click=\"editCurrentRecord()\"\r\n            text\r\n          >\r\n            <v-icon class=\"ma-2\">mdi-plus-circle</v-icon>\r\n\r\n            <!-- <span\r\n              v-if=\"\r\n                (filteredTabItems[currentFilter] || !currentFilter) &&\r\n                  !$root.isMobile &&\r\n                  !$root.isTablet\r\n              \"\r\n            >\r\n              {{ addButtonCaption }}\r\n            </span> -->\r\n          </v-btn>\r\n          <div v-if=\"noAddOnAllTab && !currentFilter\">\r\n            Please {{ filterComboLabel }} to Add Record\r\n          </div>\r\n          <v-spacer></v-spacer>\r\n          <v-menu\r\n            v-if=\"\r\n              (hasSearch && table.length) ||\r\n                search ||\r\n                remoteSearch ||\r\n                (searchModel && Object.keys(searchModel).length)\r\n            \"\r\n            v-model=\"searchMenuModel\"\r\n            :close-on-content-click=\"false\"\r\n            offset-y\r\n          >\r\n            <template v-slot:activator=\"{}\">\r\n              <v-text-field\r\n                hide-details\r\n                prepend-inner-icon=\"mdi-magnify\"\r\n                :append-icon=\"\r\n                  hasAdvancedSearch\r\n                    ? 'mdi-clipboard-text-search'\r\n                    : searchAfterCompleted && search\r\n                    ? 'mdi-account-search'\r\n                    : ''\r\n                \"\r\n                label=\"Search\"\r\n                clearable\r\n                v-model=\"search\"\r\n                @keydown.enter=\"\r\n                  searchAfterCompleted\r\n                    ? doSearch()\r\n                    : (searchMenuModel = !searchMenuModel)\r\n                \"\r\n                @click:append=\"\r\n                  searchAfterCompleted\r\n                    ? doSearch()\r\n                    : (searchMenuModel = !searchMenuModel)\r\n                \"\r\n              ></v-text-field>\r\n            </template>\r\n            <v-toolbar flat>\r\n              <h2 class=\"d-flex justify-center\">Advanced Filter/Search</h2>\r\n            </v-toolbar>\r\n            <v-list\r\n              v-if=\"hasAdvancedSearch\"\r\n              :key=\"searchModelKey\"\r\n              style=\"max-height: 50vh; overflow-y: auto\"\r\n            >\r\n              <v-list-item v-for=\"(h, i) in computedHeaders\" :key=\"i\">\r\n                <v-row>\r\n                  <v-col class=\"ma-2\">\r\n                    <label>{{ capitalize(h.value) }}:</label>\r\n                  </v-col>\r\n\r\n                  <v-col>\r\n                    <div style=\"width: 300px\">\r\n                      <!-- {{ getSchema({ name: h.value }) }} -->\r\n                      <!-- {{ h }} -->\r\n                      <v-form-component\r\n                        :ref=\"h.value\"\r\n                        :name=\"h.value\"\r\n                        :label=\"h.text\"\r\n                        :schema=\"getSchema({ name: h.value })\"\r\n                        :k=\"h.value\"\r\n                        :model=\"searchModel\"\r\n                        :hasParent=\"hasParent\"\r\n                      ></v-form-component>\r\n                    </div>\r\n                  </v-col>\r\n                </v-row>\r\n              </v-list-item>\r\n            </v-list>\r\n            <v-toolbar>\r\n              <v-btn text @click=\"clearSearch()\">Clear Filter</v-btn>\r\n              <v-spacer></v-spacer>\r\n              <v-menu\r\n                v-model=\"saveFilterMenu\"\r\n                :close-on-content-click=\"false\"\r\n                offset-y\r\n              >\r\n                <template v-slot:activator=\"{ on }\">\r\n                  <v-btn v-on=\"on\" class=\"ma-2\" color=\"info\">\r\n                    Save Filter\r\n                  </v-btn>\r\n                </template>\r\n                <v-toolbar>\r\n                  <v-text-field\r\n                    label=\"Filter Name\"\r\n                    v-model=\"filterName\"\r\n                  ></v-text-field>\r\n                  <v-btn class=\"ma-2\" text color=\"info\" @click=\"saveFilter()\">\r\n                    Save Filter\r\n                  </v-btn>\r\n                </v-toolbar>\r\n              </v-menu>\r\n            </v-toolbar>\r\n          </v-menu>\r\n          <v-btn v-if=\"hasAssistant\" text @click=\"buildCustomQueryPrompt\"\r\n            ><v-icon>\r\n              mdi-database-search\r\n            </v-icon>\r\n            <v-span v-if=\"$vuetify.breakpoint.mdAndUp\"\r\n              >Build Custom Search</v-span\r\n            >\r\n          </v-btn>\r\n          <v-btn\r\n            v-if=\"hasAssistant && assistantQry\"\r\n            text\r\n            @click=\"resetAssistantQry\"\r\n            ><v-icon>\r\n              mdi-close\r\n            </v-icon>\r\n            <v-span v-if=\"$vuetify.breakpoint.mdAndUp\"\r\n              >Reset Custom Search</v-span\r\n            >\r\n          </v-btn>\r\n          <v-spacer></v-spacer>\r\n          <v-btn v-if=\"expandable\" text small @click=\"expandAll()\">\r\n            <v-icon v-if=\"!allTableExpanded\" class=\"ma-2\"\r\n              >mdi-expand-all</v-icon\r\n            >\r\n            <v-icon v-else class=\"ma-2\">mdi-collapse-all</v-icon>\r\n          </v-btn>\r\n\r\n          <v-autocomplete\r\n            clearable\r\n            v-if=\"\r\n              !edited &&\r\n                (hasSearch ||\r\n                  (filteredTabItems.length &&\r\n                    filteredTabItems.length > 1 &&\r\n                    !noTabs)) &&\r\n                !useTabs & !$root.isMobile &&\r\n                filteredTabItems.length &&\r\n                filteredTabItems.length > 1 &&\r\n                !noTabs\r\n            \"\r\n            class=\"mt-5 pa-2\"\r\n            :items=\"filteredTabItems\"\r\n            item-text=\"caption\"\r\n            item-value=\"value\"\r\n            @change=\"applyFilter\"\r\n            @keydown=\"applyFilterOnEnter\"\r\n            :label=\"filterComboLabel || 'Filter'\"\r\n          ></v-autocomplete>\r\n\r\n          <v-autocomplete\r\n            v-if=\"additionalModel && additionalModel.custom_qry\"\r\n            clearable\r\n            class=\"mt-5 pa-2\"\r\n            :items=\"additionalModel.custom_qry\"\r\n            item-text=\"caption\"\r\n            item-value=\"_id\"\r\n            @change=\"applyCustomQry\"\r\n            label=\"Custom Query\"\r\n          >\r\n            <template v-slot:item=\"{ item }\">\r\n              <!-- <v-list>\r\n                <v-list-item\r\n                  v-for=\"(item, index) in additionalModel.custom_qry\"\r\n                  :key=\"item._id\"\r\n                >\r\n                  <v-list-item-content>\r\n                    <v-list-item-title>{{ item.caption }}</v-list-item-title>\r\n                  </v-list-item-content>\r\n                  <v-list-item-action> -->\r\n              {{ item.caption }}\r\n              <v-btn icon @click=\"deleteCustomQry(item, index)\">\r\n                <v-icon color=\"red\">mdi-delete</v-icon>\r\n              </v-btn>\r\n              <!-- </v-list-item-action>\r\n                </v-list-item>\r\n              </v-list> -->\r\n            </template>\r\n          </v-autocomplete>\r\n\r\n          <v-menu-button\r\n            :title=\"addButtonCaption\"\r\n            v-bind=\"getAddButton()\"\r\n            :apply=\"applyRow\"\r\n            :reset=\"resetNewRow\"\r\n            :menuOpen=\"menuOpen\"\r\n            icon=\"mdi-plus-circle\"\r\n            :modal=\"true\"\r\n            :text=\"true\"\r\n            color=\"info\"\r\n            :menuItemClick=\"addRowFromButton\"\r\n            :hasSearch=\"true\"\r\n            :getItems=\"getItems\"\r\n            :menuItems=\"menuItems\"\r\n            v-if=\"\r\n              addMenuButton &&\r\n                !readonly &&\r\n                (!noAddOnAllTab || (noAddOnAllTab && currentFilter))\r\n            \"\r\n            :formModel=\"formModel\"\r\n            :editableFields=\"getEditableFields()\"\r\n            :table=\"this\"\r\n            :key=\"menuButtonKey\"\r\n            :capitalizeText=\"true\"\r\n          ></v-menu-button>\r\n\r\n          <v-btn\r\n            v-if=\"tableInsertable && !addMenuButton\"\r\n            class=\"ma-1\"\r\n            v-on=\"on\"\r\n            text\r\n            color=\"info\"\r\n            @click=\"addRow()\"\r\n          >\r\n            <v-icon class=\"ma-2\">mdi-plus-circle</v-icon>\r\n            <div>{{ addButtonCaption || \"Add Record\" }}</div>\r\n          </v-btn>\r\n          <!-- (!noAddOnAllTab || (noAddOnAllTab && currentFilter)) && -->\r\n          <v-toolbar\r\n            class=\"table-toolbar\"\r\n            flat\r\n            v-if=\"\r\n              tableInsertable &&\r\n                !edited &&\r\n                !readonly &&\r\n                table.length &&\r\n                table[0]._id == newRowId\r\n            \"\r\n          >\r\n            <v-btn\r\n              v-if=\"table.length && table[0]._id == newRowId\"\r\n              class=\"ma-1\"\r\n              icon\r\n            >\r\n              <v-icon color=\"success\" @click=\"applyRow()\">\r\n                mdi-checkbox-marked-circle\r\n              </v-icon>\r\n            </v-btn>\r\n\r\n            <v-btn\r\n              v-if=\"table.length && table[0]._id == newRowId\"\r\n              icon\r\n              color=\"warning\"\r\n              class=\"ma-1\"\r\n            >\r\n              <v-icon @click=\"resetNewRow()\">mdi-cancel</v-icon>\r\n            </v-btn>\r\n          </v-toolbar>\r\n\r\n          <v-spacer> </v-spacer>\r\n\r\n          <v-btn\r\n            v-if=\"showAdvancedSearch\"\r\n            class=\"ma-1\"\r\n            small\r\n            text\r\n            @click=\"showAdvancedSearch = !showAdvancedSearch\"\r\n          >\r\n            <v-icon color=\"info\">mdi-filter-remove</v-icon>\r\n          </v-btn>\r\n          <v-spacer></v-spacer>\r\n          <a target=\"_blank\" :href=\"xllink\" v-if=\"xllink\">Download Excel</a>\r\n\r\n          <v-toolbar\r\n            class=\"table-toolbar\"\r\n            :key=\"toolBarKey\"\r\n            v-if=\"\r\n              !$root.isMobile &&\r\n                !edited &&\r\n                !dExcel &&\r\n                toolBarControls &&\r\n                !hideControls &&\r\n                !noToolBar &&\r\n                tableReady &&\r\n                !readonly\r\n            \"\r\n            flat\r\n          >\r\n            <v-spacer\r\n              v-if=\"toolbarRight && $vuetify.breakpoint.mdAndUp\"\r\n            ></v-spacer>\r\n\r\n            <v-list-item\r\n              v-for=\"(c, i) in (safeToolBarControls || []).filter(t => {\r\n                return $root.customerId\r\n                  ? t['v-bind'] && !t['v-bind'].noCustomer\r\n                  : !t.hidden;\r\n              })\"\r\n              :key=\"i\"\r\n            >\r\n              <v-btn\r\n                :small=\"true\"\r\n                :color=\"c['v-bind'].color\"\r\n                :text=\"c['v-bind'].text\"\r\n                :class=\"c['v-bind'].class\"\r\n                v-if=\"\r\n                  c.default &&\r\n                    !$root.isMobile &&\r\n                    !$root.isTablet &&\r\n                    c['v-bind'] &&\r\n                    c[`comp`] == 'v-btn' &&\r\n                    !c['v-bind'].hidden &&\r\n                    !c.hidden &&\r\n                    !hideCtl(c)\r\n                \"\r\n                @click=\"customBtnClick(c)\"\r\n                :loading=\"customBtnLoading\"\r\n              >\r\n                <v-icon\r\n                  :class=\"$vuetify.breakpoint.smAndDown ? 'ma-0' : 'ma-2'\"\r\n                  v-if=\"c['v-bind'] && c['v-bind'].icon\"\r\n                >\r\n                  {{ c[\"v-bind\"].icon }}\r\n                </v-icon>\r\n                {{ c[\"v-bind\"][\"input-value\"] }}\r\n              </v-btn>\r\n\r\n              <component\r\n                v-else-if=\"\r\n                  c.default &&\r\n                    !edited &&\r\n                    c['v-bind'] &&\r\n                    !c['v-bind'].hidden &&\r\n                    !hideCtl(c)\r\n                \"\r\n                :hidden=\"c.hidden\"\r\n                small\r\n                :is=\"c[`comp`]\"\r\n                :ref=\"c[`id`]\"\r\n                :id=\"c[`id`]\"\r\n                :table=\"getObject()\"\r\n                :style=\"'width:' + c[`v-bind`].width\"\r\n                v-bind=\"c[`v-bind`]\"\r\n              >\r\n                {{ c.value }}\r\n              </component>\r\n            </v-list-item>\r\n          </v-toolbar>\r\n\r\n          <v-tooltip\r\n            v-if=\"!noRefreshButton && getFreshData && !edited && tableReady\"\r\n            top\r\n          >\r\n            <template v-slot:activator=\"{ on }\">\r\n              <v-btn\r\n                class=\"ma-1\"\r\n                small\r\n                v-on=\"on\"\r\n                @click=\"refreshParent ? refreshParent() : refreshTable()\"\r\n                text\r\n              >\r\n                <v-icon\r\n                  :class=\"$vuetify.breakpoint.smAndDown ? 'ma-0' : 'ma-2'\"\r\n                >\r\n                  mdi-reload\r\n                </v-icon>\r\n              </v-btn>\r\n            </template>\r\n            <span>Refresh</span>\r\n          </v-tooltip>\r\n\r\n          <v-spacer v-if=\"!$root.isMobile\"></v-spacer>\r\n          <v-pager\r\n            :key=\"pagerKey\"\r\n            v-if=\"\r\n              !$root.isMobile &&\r\n                !edited &&\r\n                tableReady &&\r\n                !hideFooter &&\r\n                !editDisablePagination &&\r\n                !disablePagination\r\n            \"\r\n            :pageStart=\"pageStart\"\r\n            :pageStop=\"itemsCount > pageStop ? pageStop : itemsCount\"\r\n            :itemsLength=\"itemsCount\"\r\n            :navigate=\"navigate\"\r\n            :page=\"page\"\r\n          ></v-pager>\r\n\r\n          <v-menu\r\n            v-model=\"menuModel\"\r\n            v-if=\"!edited && !noAdditionalMenu\"\r\n            :close-on-content-click=\"false\"\r\n            :close-on-click=\"closeMenuOnClick\"\r\n          >\r\n            <template v-slot:activator=\"{ on, attrs }\">\r\n              <v-btn class=\"ma-1\" icon small v-bind=\"attrs\" v-on=\"on\">\r\n                <v-icon class=\"ma-2\">mdi-dots-vertical</v-icon>\r\n              </v-btn>\r\n            </template>\r\n            <v-toolbar class=\"mb-n2\" flat>\r\n              <v-spacer></v-spacer>\r\n              <v-btnright icon @click=\"menuModel = false\">\r\n                <v-icon small>mdi-close</v-icon>\r\n              </v-btnright>\r\n            </v-toolbar>\r\n\r\n            <v-list class=\"mt-n4\">\r\n              <v-list-item v-if=\"groupByItemsReady\">\r\n                <!-- captializedGroupByItems():{{ captializedGroupByItems() }} -->\r\n\r\n                <v-autocomplete\r\n                  label=\"Group By\"\r\n                  :clearable=\"true\"\r\n                  :items=\"captializedGroupByItems()\"\r\n                  @change=\"applyGroupBy\"\r\n                ></v-autocomplete>\r\n              </v-list-item>\r\n              <v-list-item v-if=\"dExcel\">\r\n                <v-btn icon v-on=\"on\" right @click=\"submit\">\r\n                  <v-icon>mdi-content-save</v-icon>\r\n                  Save Table\r\n                </v-btn>\r\n              </v-list-item>\r\n\r\n              <v-list-item>\r\n                <v-btn :loading=\"loading\" text small @click=\"downloadExcel()\">\r\n                  <v-icon class=\"ma-2\">mdi-file-excel</v-icon>\r\n                  Download Excel\r\n                </v-btn>\r\n              </v-list-item>\r\n\r\n              <v-list-item v-if=\"hasUpload && tableReady\">\r\n                <v-btn\r\n                  :loading=\"loading\"\r\n                  text\r\n                  small\r\n                  v-on=\"on\"\r\n                  @click=\"uploadExcel()\"\r\n                >\r\n                  <v-icon class=\"ma-2\">mdi-auto-upload</v-icon>\r\n                  Upload Excel\r\n                </v-btn>\r\n              </v-list-item>\r\n              <v-list-item v-if=\"$vuetify.breakpoint.smAndDown\">\r\n                <v-btn small @click=\"toggleBreakpoint()\" text>\r\n                  <v-icon v-if=\"breakpoint && breakpoint != '0'\" class=\"ma-2\">\r\n                    mdi-table-large\r\n                  </v-icon>\r\n                  <v-icon class=\"ma-2\" v-else>mdi-view-list</v-icon>\r\n                  {{ breakpoint ? \"View Table\" : \"View List\" }}\r\n                </v-btn>\r\n              </v-list-item>\r\n              <v-list-item\r\n                v-if=\"tableReady && !hideFooter && table.length > 10\"\r\n              >\r\n                <v-btn\r\n                  v-on=\"on\"\r\n                  text\r\n                  small\r\n                  @click=\"editDisablePagination = !editDisablePagination\"\r\n                >\r\n                  <v-icon class=\"ma-2\">mdi-select-all</v-icon>\r\n                  {{\r\n                    editDisablePagination\r\n                      ? \"Enable Pagination\"\r\n                      : \"Disable Pagination\"\r\n                  }}\r\n                </v-btn>\r\n              </v-list-item>\r\n\r\n              <v-list-item v-if=\"columnTool && tableReady && !$root.customerId\">\r\n                <v-menu\r\n                  v-if=\"columnTool && tableReady && !$root.customerId\"\r\n                  :close-on-content-click=\"false\"\r\n                  offset-y\r\n                >\r\n                  <template v-slot:activator=\"{ on: onMenu, attrs }\">\r\n                    <v-btn small v-bind=\"attrs\" v-on=\"{ ...onMenu }\" text>\r\n                      <v-icon class=\"ma-2\">mdi-view-column</v-icon>\r\n                      Choose Columns\r\n                    </v-btn>\r\n                  </template>\r\n                  <v-list class=\"column-list\">\r\n                    <draggable style=\"width: 100%\" :list=\"computedHeaders\">\r\n                      <v-list-item\r\n                        class=\"pointer\"\r\n                        v-for=\"(item, index) in (computedHeaders || []).filter(\r\n                          c => {\r\n                            return c.value != 'actions';\r\n                          }\r\n                        )\"\r\n                        :key=\"index\"\r\n                      >\r\n                        <!-- {{ item }} -->\r\n                        <v-list-item-title>{{ item.text }}</v-list-item-title>\r\n\r\n                        <v-switch v-model=\"item.show\"></v-switch>\r\n                      </v-list-item>\r\n                    </draggable>\r\n                  </v-list>\r\n                  <v-toolbar>\r\n                    <v-btn @click=\"saveColumns()\" text style=\"top\" color=\"info\">\r\n                      Save Columns\r\n                    </v-btn>\r\n                    <v-btn\r\n                      @click=\"resetColumns()\"\r\n                      text\r\n                      style=\"top\"\r\n                      color=\"warning\"\r\n                    >\r\n                      Reset Columns\r\n                    </v-btn>\r\n                  </v-toolbar>\r\n                </v-menu>\r\n              </v-list-item>\r\n              <hr />\r\n              <v-list-item\r\n                v-for=\"(c, i) in (safeToolBarControls || []).filter(t => {\r\n                  return (\r\n                    (!t.default || $root.isMobile || $root.isTablet) &&\r\n                    ($root.customerId\r\n                      ? t['v-bind'] && !t['v-bind'].noCustomer\r\n                      : !t.hidden)\r\n                  );\r\n                })\"\r\n                :key=\"i\"\r\n              >\r\n                <v-btn\r\n                  :small=\"true\"\r\n                  :color=\"c['v-bind'].color\"\r\n                  :text=\"c['v-bind'].text\"\r\n                  :class=\"c['v-bind'].class\"\r\n                  v-if=\"\r\n                    (!c.default || $root.isMobile || $root.isTablet) &&\r\n                      c[`comp`] == 'v-btn' &&\r\n                      c['v-bind'] &&\r\n                      !c['v-bind'].hidden &&\r\n                      !c.hidden &&\r\n                      !hideCtl(c)\r\n                  \"\r\n                  @click=\"customBtnClick(c)\"\r\n                  :loading=\"customBtnLoading\"\r\n                >\r\n                  <v-icon\r\n                    :class=\"$vuetify.breakpoint.smAndDown ? 'ma-2' : 'ma-2'\"\r\n                    v-if=\"c['v-bind'] && c['v-bind'].icon\"\r\n                  >\r\n                    {{ c[\"v-bind\"].icon }}\r\n                  </v-icon>\r\n                  {{ c[\"v-bind\"][\"input-value\"] }}\r\n                </v-btn>\r\n                <component\r\n                  v-else-if=\"\r\n                    !c.default &&\r\n                      !edited &&\r\n                      c['v-bind'] &&\r\n                      !c['v-bind'].hidden &&\r\n                      !hideCtl(c)\r\n                  \"\r\n                  :hidden=\"c.hidden\"\r\n                  small\r\n                  :is=\"c[`comp`]\"\r\n                  :ref=\"c[`id`]\"\r\n                  :id=\"c[`id`]\"\r\n                  :table=\"getObject()\"\r\n                  v-bind=\"c[`v-bind`]\"\r\n                >\r\n                  {{ c.value }}\r\n                </component>\r\n              </v-list-item>\r\n            </v-list>\r\n          </v-menu>\r\n\r\n          <div class=\"text-center\">\r\n            <v-dialog v-model=\"helpModel\" v-if=\"helpText\" width=\"500\">\r\n              <template v-slot:activator=\"{ on, attrs }\">\r\n                <v-btn class=\"ma-1\" icon small v-bind=\"attrs\" v-on=\"on\">\r\n                  <v-icon class=\"ma-2\">mdi-help-box</v-icon>\r\n                </v-btn>\r\n              </template>\r\n\r\n              <v-card>\r\n                <v-card-title class=\"text-h5 grey lighten-2\">\r\n                  {{ helpTitle }}\r\n                </v-card-title>\r\n\r\n                <v-card-text>\r\n                  {{ helpText }}\r\n                </v-card-text>\r\n              </v-card>\r\n            </v-dialog>\r\n          </div>\r\n          <template> </template>\r\n\r\n          <v-tooltip v-if=\"!isMobile && !noFullScreen\" top>\r\n            <template v-slot:activator=\"{ on }\">\r\n              <v-btn v-on=\"on\" class=\"ma-2\" icon @click=\"toggleFullScreen\">\r\n                <v-icon v-if=\"!isFullScreen\">mdi-fullscreen</v-icon>\r\n                <v-icon round color=\"error\" v-else>mdi-fullscreen-exit</v-icon>\r\n              </v-btn>\r\n            </template>\r\n            <span>Toggle Full Screen</span>\r\n          </v-tooltip>\r\n        </v-toolbar>\r\n      </div>\r\n      <div v-if=\"upload\">\r\n        <v-upload\r\n          defaultMessage=\"Drop here excel file to upload\"\r\n          :label=\"uploadFieldsTitle\"\r\n          :objectName=\"data_object.object_name\"\r\n          :uploadFields=\"uploadFields\"\r\n        ></v-upload>\r\n      </div>\r\n\r\n      <h3 class=\"ma-2\" v-if=\"isEditedNew && edited\">\r\n        {{\r\n          addButtonCaption\r\n            ? addButtonCaption.replace(\"Add\", \"New\")\r\n            : \"New Record\"\r\n        }}\r\n      </h3>\r\n\r\n      <v-tabs\r\n        :hidden=\"hideEditedTabs || isEditedNew\"\r\n        v-if=\"editedTabs.length\"\r\n        class=\"mt-2\"\r\n        v-model=\"edited\"\r\n        :key=\"editedTabsKey\"\r\n        show-arrows\r\n        grow\r\n      >\r\n        <v-tab key=\"all_records\">All {{ tableName }}</v-tab>\r\n        <v-tab\r\n          @click=\"getCurrentEditedItem(t)\"\r\n          v-for=\"(t, i) in editedTabs\"\r\n          :key=\"i\"\r\n        >\r\n          <v-icon class=\"pr-2\" v-if=\"t.icon\">{{ t.icon }}</v-icon>\r\n          {{ t.text }}\r\n\r\n          <v-btn icon @click=\"removeTab(i)\" class=\"ml-2\">\r\n            <v-icon x-small>mdi-close</v-icon>\r\n          </v-btn>\r\n        </v-tab>\r\n      </v-tabs>\r\n\r\n      <div class=\"edited-form\" v-if=\"edited\">\r\n        <v-component :is=\"'div'\" fullscreen v-model=\"dialog\">\r\n          <v-form-card\r\n            :dObject=\"dObject\"\r\n            v-bind=\"schema['v-bind']\"\r\n            :inTable=\"true\"\r\n            ref=\"form\"\r\n            :panels=\"true\"\r\n            :key=\"formKey\"\r\n            :noCache=\"noCache\"\r\n            :hasParent=\"hasParent\"\r\n          ></v-form-card>\r\n        </v-component>\r\n        <v-toolbar flat>\r\n          <v-spacer></v-spacer>\r\n          <div class=\"edit-bar\" flat v-if=\"!childEdited && edited\">\r\n            <v-spacer></v-spacer>\r\n\r\n            <v-btn text @click=\"cancelEdit\">\r\n              <v-icon class=\"ma-2\">mdi-cancel</v-icon><span>Cancel Edit</span>\r\n            </v-btn>\r\n\r\n            <v-btn\r\n              text\r\n              v-if=\"!disableSave\"\r\n              right\r\n              class=\"text-right ma-2\"\r\n              color=\"success\"\r\n              @click=\"validateAndSave()\"\r\n            >\r\n              <v-icon class=\"ma-2\">mdi-check</v-icon>\r\n              <span> {{ saveButtonCaption || \"Save\" }}</span>\r\n            </v-btn>\r\n            <v-menu\r\n              v-model=\"copyMenu\"\r\n              :close-on-content-click=\"false\"\r\n              :nudge-width=\"200\"\r\n              v-if=\"copyRecords\"\r\n              offset-x\r\n            >\r\n              <template v-slot:activator=\"{ on, attrs }\">\r\n                <v-btn text small v-on=\"on\">\r\n                  <v-icon>mdi-content-copy</v-icon>\r\n                  Duplicate\r\n                </v-btn>\r\n              </template>\r\n              <v-card class=\"pa-2\">\r\n                <h3>Copy {{ dObject.model[copyRecords.field_name] }}</h3>\r\n                <br />\r\n                <v-label>\r\n                  New {{ copyRecords.field_name }} separated by comma:\r\n                </v-label>\r\n                <v-textarea v-model=\"duplicateValues\"></v-textarea>\r\n                <v-btn @click=\"duplicate()\" color=\"info\">Submit</v-btn>\r\n              </v-card>\r\n            </v-menu>\r\n            <!-- <v-btn\r\n            small\r\n            right\r\n            text\r\n            class=\"text-right ma-2\"\r\n            color=\"success\"\r\n            v-if=\"isEditedNew\"\r\n            @click=\"validateAndSave(true)\"\r\n          >\r\n            Save and New\r\n          </v-btn> -->\r\n            <v-alert\r\n              dismissible\r\n              dense\r\n              v-if=\"errorMessage != '' && errorMessage\"\r\n              type=\"error\"\r\n            >\r\n              {{ errorMessage }}\r\n            </v-alert>\r\n          </div>\r\n        </v-toolbar>\r\n      </div>\r\n\r\n      <div\r\n        ref=\"tableWrap\"\r\n        :style=\"{ height: wrapHeight, 'max-height': wrapHeight }\"\r\n        :class=\"\r\n          hideScroll\r\n            ? ''\r\n            : $root.isMobile\r\n            ? ''\r\n            : noHorizontalScroll\r\n            ? 'data-table-wrap-no-hor'\r\n            : 'data-table-wrap'\r\n        \"\r\n        v-else\r\n      >\r\n        <div ref=\"outerScroll\" v-if=\"!hideScroll\" class=\"outer-scroll\">\r\n          <div refs=\"innerScroll\" class=\"inner-scroll\"></div>\r\n        </div>\r\n        <!-- computedHeaders:{{ computedHeaders }} -->\r\n\r\n        <v-data-table\r\n          :items=\"filteredItems\"\r\n          v-if=\"\r\n            !dList &&\r\n              !dExcel &&\r\n              Array.isArray(table) &&\r\n              !mapDialog &&\r\n              tableReady &&\r\n              computedHeaders\r\n          \"\r\n          v-model=\"selected\"\r\n          :headers=\"\r\n            (computedHeaders || []).filter(h => {\r\n              return (\r\n                table.length &&\r\n                !h.hide &&\r\n                (h.show || h.value == 'actions' || tableEditRow)\r\n              );\r\n            })\r\n          \"\r\n          :group-by=\"groupBy\"\r\n          :group-key=\"groupBy\"\r\n          :group-desc=\"false\"\r\n          item-key=\"_id\"\r\n          :show-select=\"\r\n            (!noDelete && selectDelete) ||\r\n              singleSelect ||\r\n              select ||\r\n              isDraggable ||\r\n              selectSwitch\r\n          \"\r\n          :show-expand=\"expandable\"\r\n          :show-group-by=\"showGroupBy\"\r\n          :fixed-header=\"fixedHeader\"\r\n          :height=\"tableHeight\"\r\n          :disable-pagination=\"editDisablePagination\"\r\n          :hide-default-footer=\"true\"\r\n          :hide-default-header=\"hideHeader\"\r\n          :items-per-page=\"itemsPerPageEdited\"\r\n          :mobile-breakpoint=\"breakpoint\"\r\n          @click:row=\"handleClick\"\r\n          @pagination=\"onPagination\"\r\n          @item-selected=\"itemSelected || null\"\r\n          :options.sync=\"pagination\"\r\n          dense\r\n          :expand.sync=\"expand\"\r\n          ref=\"dTable\"\r\n          :expanded.sync=\"expanded\"\r\n          class=\"row-pointer elevation-1\"\r\n          transition=\"slide-y-transition\"\r\n          v-draggable\r\n          @sorted=\"saveOrder\"\r\n          :page.sync=\"page\"\r\n          :loading=\"loading\"\r\n          :search=\"searchLen ? searchTrigger : search\"\r\n          :item-class=\"itemClass\"\r\n          :disable-sort=\"disableSort\"\r\n          :single-select=\"\r\n            (singleSelect && !selectDelete) || (noDelete && !select)\r\n          \"\r\n          :server-items-length=\"serverItemsLength\"\r\n          :custom-sort=\"customSorting\"\r\n          :custom-filter=\"customFilter ? customFiltering : defaultFilter\"\r\n          :tableName=\"tableName\"\r\n          :key=\"tableKey\"\r\n          :style=\"tblStyle\"\r\n          @update:sort-by=\"getSortBy\"\r\n          @update:sort-desc=\"getSortDesc\"\r\n          @update:group-by=\"getGroupBy\"\r\n          @update:group-desc=\"handleGroupDescChange\"\r\n        >\r\n          <template v-if=\"isGoToButton\" v-slot:item.goto=\"{ item }\">\r\n            <v-btn small elevation=\"0\" @click=\"goToButtonAction(item)\">\r\n              {{ goToButtonText }}\r\n            </v-btn>\r\n          </template>\r\n\r\n          <template v-slot:body.prepend>\r\n            <tr v-if=\"showAdvancedSearch\">\r\n              <td\r\n                style=\"min-width: 150px; padding: 0px\"\r\n                v-for=\"(h, i) in computedHeaders\"\r\n                :key=\"i\"\r\n              >\r\n                <v-form-component\r\n                  :ref=\"h.value\"\r\n                  :name=\"h.value\"\r\n                  :schema=\"getSchema({ name: h.value })\"\r\n                  :k=\"h.value\"\r\n                  :model=\"searchModel\"\r\n                  :hasParent=\"hasParent\"\r\n                ></v-form-component>\r\n              </td>\r\n            </tr>\r\n          </template>\r\n          <!-- v-if=\"\r\n            props.props.headers.some((h) => {\r\n              return h.span;\r\n            })\r\n          \"    -->\r\n          <template v-slot:top>\r\n            <!-- Custom sort control for mobile -->\r\n            <div\r\n              v-if=\"$root.isMobile\"\r\n              class=\"custom-sort-control mb-n10 mt-n6 pl-4 pt-4\"\r\n            >\r\n              <!-- Your custom sort control for mobile -->\r\n              <!-- <v-menu\r\n                :close-on-content-click=\"false\"\r\n                v-if=\"$root.isMobile\"\r\n                v-model=\"menuFilterModel\"\r\n              >\r\n                <template v-slot:activator=\"{ on, attrs }\">\r\n                  <v-btn class=\"ma-2\" icon small v-bind=\"attrs\" v-on=\"on\">\r\n                    <v-icon>mdi-table-filter</v-icon>\r\n                  </v-btn>\r\n                </template> -->\r\n              <!-- <v-list>\r\n                  <v-list-item> -->\r\n              <v-select\r\n                v-if=\"\r\n                  filteredTabItems.length &&\r\n                    filteredTabItems.length > 1 &&\r\n                    !noTabs &&\r\n                    $root.isMobile\r\n                \"\r\n                clearable\r\n                :items=\"filteredTabItems\"\r\n                item-text=\"caption\"\r\n                item-value=\"value\"\r\n                @change=\"applyFilter\"\r\n                class=\"mb-1 mr-1 mt-2\"\r\n                :outlined=\"false\"\r\n                filled\r\n                :label=\"filterComboLabel || 'Filter'\"\r\n              ></v-select>\r\n              <!-- </v-list-item>\r\n                </v-list> -->\r\n              <!-- </v-menu> -->\r\n            </div>\r\n          </template>\r\n\r\n          <template\r\n            slot=\"header\"\r\n            slot-scope=\"props\"\r\n            v-if=\"\r\n              props.props.headers.some(h => {\r\n                return h['v-bind'] && h['v-bind'].span && !h['v-bind'].noSpan;\r\n              })\r\n            \"\r\n          >\r\n            <!-- {{ props.props.headers }} -->\r\n            <td\r\n              v-for=\"(h, i) in (props.props.headers || []).filter(r => {\r\n                return !r['v-bind'] && !r.value == 'actions';\r\n              })\"\r\n              :key=\"i\"\r\n            >\r\n              {{ h.text }}\r\n            </td>\r\n\r\n            <td\r\n              :colspan=\"h['v-bind'] ? h['v-bind'].span.headers.length : 1\"\r\n              v-for=\"(h, i) in (props.props.headers || []).filter(r => {\r\n                return r['v-bind'] && r['v-bind'].span;\r\n              })\"\r\n              :key=\"i\"\r\n            >\r\n              <v-row v-if=\"h['v-bind']\" class=\"ma-2 pr-12\">\r\n                <v-col v-for=\"(s, j) in h['v-bind'].span.headers\" :key=\"j\">\r\n                  <span :class=\"'ml-n' + j * 6\">{{ s }}</span>\r\n                </v-col>\r\n              </v-row>\r\n            </td>\r\n          </template>\r\n\r\n          <template slot=\"group.header\" slot-scope=\"props\">\r\n            <td :colspan=\"props.headers.length\">\r\n              <v-btn\r\n                class=\"ma-2\"\r\n                @click=\"props.toggle\"\r\n                small\r\n                text\r\n                :data-open=\"props.isOpen\"\r\n                ref=\"group\"\r\n              >\r\n                <v-icon :ref=\"'openGroup_' + props.group\" v-if=\"props.isOpen\">\r\n                  mdi-chevron-up\r\n                </v-icon>\r\n                <v-icon :ref=\"'closeGroup_' + props.group\" v-else>\r\n                  mdi-chevron-down\r\n                </v-icon>\r\n                <h4>\r\n                  {{ capitalize(getGroupName(props)) }}\r\n                </h4>\r\n              </v-btn>\r\n              <v-tooltip bottom>\r\n                <template v-slot:activator=\"{ on, attrs }\">\r\n                  <v-btn\r\n                    ref=\"removeGroup\"\r\n                    v-bind=\"attrs\"\r\n                    v-on=\"on\"\r\n                    small\r\n                    text\r\n                    @click=\"props.remove\"\r\n                  >\r\n                    <v-icon>mdi-close</v-icon>\r\n                  </v-btn>\r\n                </template>\r\n                Ungroup\r\n              </v-tooltip>\r\n            </td>\r\n          </template>\r\n\r\n          <template slot=\"item.data-table-select\" slot-scope=\"item\">\r\n            <td\r\n              v-if=\"\r\n                (selectDelete && !noDelete) ||\r\n                  select ||\r\n                  singleSelect ||\r\n                  selectSwitch\r\n              \"\r\n              style=\"max-width: 25px; overflow: hidden\"\r\n            >\r\n              <v-checkbox\r\n                class=\"mt-0 mb-n4\"\r\n                v-if=\"\r\n                  (!droppedObjects || !sortedDraggedObjects(item).length) &&\r\n                    ((item.item._id && !disabledProperty) ||\r\n                      (disabledValue &&\r\n                        item.item[disabledProperty] !== disabledValue) ||\r\n                      (!disabledValue && !item.item[disabledProperty]))\r\n                \"\r\n                v-model=\"item.isSelected\"\r\n                @change=\"\r\n                  log(item);\r\n                  item.select($event);\r\n                \"\r\n              ></v-checkbox>\r\n            </td>\r\n            <td v-if=\"isDraggable\">\r\n              <v-tooltip right>\r\n                <template v-slot:activator=\"{ on }\">\r\n                  <v-icon v-on=\"on\" class=\"drag-handle\">mdi-drag</v-icon>\r\n                </template>\r\n                <span>Drag to reorder</span>\r\n              </v-tooltip>\r\n            </td>\r\n            <td v-if=\"rowIcons\">\r\n              <span v-for=\"(i, j) in rowIcons(item)\" :key=\"j\">\r\n                <v-icon :color=\"i.color\">{{ i.icon }}</v-icon>\r\n                {{ i.title }}\r\n              </span>\r\n            </td>\r\n          </template>\r\n\r\n          <template\r\n            v-for=\"(field, i) in capitalizable\"\r\n            :slot=\"[`item.` + field]\"\r\n            slot-scope=\"props\"\r\n          >\r\n            <div\r\n              :key=\"i\"\r\n              v-if=\"\r\n                schema.properties[field] && schema.properties[field].template\r\n              \"\r\n              v-html=\"getTemplate(props.item, { name: field })\"\r\n            ></div>\r\n\r\n            <div\r\n              :key=\"field\"\r\n              v-else-if=\"props.item[field] && schema.properties[field]\"\r\n            >\r\n              {{\r\n                props.item[field] && schema.properties[field][\"v-bind\"]\r\n                  ? schema.properties[field][\"v-bind\"] &&\r\n                    schema.properties[field][\"v-bind\"].returnObject\r\n                    ? schema.properties[field][\"v-bind\"]\r\n                      ? props.item[field][\r\n                          schema.properties[field][\"v-bind\"].itemText\r\n                        ]\r\n                      : capitalize(props.item[field].toString())\r\n                    : \"\"\r\n                  : \"\"\r\n              }}\r\n            </div>\r\n          </template>\r\n\r\n          <!-- <template\r\n          v-for=\"(slot, i) in coloredFields\"\r\n          v-slot:[`item.${slot}`]=\"{ item }\"\r\n        >\r\n          <v-chip\r\n            v-if=\"item[slot]\"\r\n            :key=\"i\"\r\n            :color=\"\r\n              getItemColor\r\n                ? getItemColor(item[slot], slot, item, tableName)\r\n                : item['color']\r\n                ? item['color']\r\n                : ''\r\n            \"\r\n            dark\r\n            outlined\r\n          >\r\n            <b> {{ getChipValue(item, slot) }}</b>\r\n          </v-chip>\r\n        </template> -->\r\n\r\n          <template\r\n            v-for=\"(slot, i) in specialFields\"\r\n            v-slot:[`item.${slot.model}`]=\"{ item }\"\r\n          >\r\n            <v-text-dialog\r\n              v-if=\"item[slot.model] && dialogFields\"\r\n              :vModel=\"item[slot.model]\"\r\n              :width=\"slot.width\"\r\n              :icon=\"getTextDialogIcon(slot, item)\"\r\n              :key=\"i\"\r\n            ></v-text-dialog>\r\n\r\n            <!-- <v-alert\r\n            v-if=\"item[slot.model] && !dialogFields\"\r\n            :key=\"i\"\r\n            :color=\"\r\n              getItemColor\r\n                ? getItemColor(item[slot.model], slot.model, item, tableName)\r\n                : item['color']\r\n                ? item['color']\r\n                : ''\r\n            \"\r\n          > -->\r\n\r\n            <v-alert\r\n              dense\r\n              class=\"ma-2\"\r\n              text\r\n              :color=\"\r\n                $vuetify.theme.dark\r\n                  ? invertColor(\r\n                      getItemColor(\r\n                        item[slot.model],\r\n                        slot.model,\r\n                        item,\r\n                        tableName\r\n                      )\r\n                    )\r\n                  : getItemColor(item[slot.model], slot.model, item, tableName)\r\n              \"\r\n              v-if=\"item[slot.model] && !dialogFields\"\r\n              :key=\"i\"\r\n            >\r\n              <span style=\"white-space: nowrap\">\r\n                {{ getChipValue(item, slot.model) }}\r\n              </span>\r\n            </v-alert>\r\n\r\n            <!-- </v-alert> -->\r\n          </template>\r\n\r\n          <template\r\n            v-for=\"(field, i) in editable\"\r\n            :slot=\"[`item.` + field.name]\"\r\n            slot-scope=\"props\"\r\n          >\r\n            <v-edit-dialog\r\n              v-model=\"dialogModel\"\r\n              v-if=\"\r\n                !editRow &&\r\n                  ((props.item._id != newRowId &&\r\n                    !readonly &&\r\n                    !field.directEdit &&\r\n                    editedItem &&\r\n                    props.item._id &&\r\n                    props.item._id != newRowId) ||\r\n                    (!editedItem &&\r\n                      !readonly &&\r\n                      !field.nonUpdatable &&\r\n                      !field.directEdit &&\r\n                      props.item._id != newRowId))\r\n              \"\r\n              :key=\"field.name + i\"\r\n              :ref=\"field.name + props.item._id\"\r\n              @cancel=\"cancel\"\r\n              save-text=\"apply\"\r\n              @open=\"open(field, props)\"\r\n              @close=\"close\"\r\n              @save=\"emitDialogSave(props.item, field.name)\"\r\n            >\r\n              <div\r\n                v-if=\"\r\n                  schema.properties && getColor(props, field) == 'underscore'\r\n                \"\r\n                :class=\"\r\n                  $vuetify.breakpoint.smAndDown ? '' : getColor(props, field)\r\n                \"\r\n                v-html=\"getField(props, field)\"\r\n              ></div>\r\n\r\n              <v-chip\r\n                v-else\r\n                :color=\"getColor(props, field).replace(' editable', '')\"\r\n              >\r\n                <div class=\"chip-text\">\r\n                  {{ getField(props, field) || \"\" }}\r\n                </div>\r\n              </v-chip>\r\n              <!-- {{ getSchema(field, props.item) }} -->\r\n\r\n              <template v-slot:input>\r\n                <v-form-component\r\n                  :ref=\"field.name\"\r\n                  :name=\"field.name\"\r\n                  :model=\"props.item\"\r\n                  :parentModel=\"props.item\"\r\n                  :parModel=\"formModel\"\r\n                  :schema=\"getSchema(field, props.item)\"\r\n                  :parentSchema=\"parObject || {}\"\r\n                  :parentSchemaObject=\"getParentSchema()\"\r\n                  :inLine=\"true\"\r\n                  :k=\"field.name\"\r\n                  :defaultDataFn=\"defaultDataFn\"\r\n                  :placeholder=\"schema.properties[field.name].title\"\r\n                  :click=\"selectCtl\"\r\n                  :onValueChange=\"onValueChange\"\r\n                  :autofocus=\"true\"\r\n                  :dialogOpen=\"true\"\r\n                  :hasParent=\"hasParent\"\r\n                  :noCache=\"noCache\"\r\n                >\r\n                </v-form-component>\r\n\r\n                <v-toolbar v-if=\"showComponent(field.name, props.item)\" flat>\r\n                  <v-spacer></v-spacer>\r\n                  <v-btn\r\n                    v-if=\"!schema.properties[field.name].noEditDialogButtons\"\r\n                    @click=\"emitDialogSave(props.item, field.name)\"\r\n                    small\r\n                    text\r\n                    color=\"info\"\r\n                  >\r\n                    {{ getSaveTitle(field.name) }}\r\n                  </v-btn>\r\n                  <v-btn\r\n                    ref=\"cancelBtn\"\r\n                    @click=\"closeDialog(field.name + props.item._id)\"\r\n                    small\r\n                    text\r\n                  >\r\n                    Close\r\n                  </v-btn>\r\n                </v-toolbar>\r\n              </template>\r\n            </v-edit-dialog>\r\n\r\n            <div\r\n              :key=\"field.name + i\"\r\n              v-if=\"\r\n                (editRow && !field.hideTitle) ||\r\n                  (readonly &&\r\n                    schema.properties &&\r\n                    getColor(props, field) == 'underscore')\r\n              \"\r\n              :class=\"\r\n                $vuetify.breakpoint.smAndDown\r\n                  ? ''\r\n                  : editRow\r\n                  ? ''\r\n                  : getColor(props, field)\r\n              \"\r\n              v-html=\"getField(props, field)\"\r\n            ></div>\r\n            <div\r\n              :class=\"$vuetify.breakpoint.mdAndUp ? 'mb-2 ml-n6' : 'mb-3 ml-2'\"\r\n              :style=\"\r\n                $vuetify.breakpoint.mdAndUp && getSchema(field)[field.name]\r\n                  ? 'width:' + getSchema(field)[field.name].width + 'px'\r\n                  : ''\r\n              \"\r\n              :key=\"i\"\r\n            >\r\n              <div\r\n                style=\"width: 100px\"\r\n                v-if=\"\r\n                  disabledProperty &&\r\n                    props.item[disabledProperty] == disabledValue &&\r\n                    field.name == disabledProperty\r\n                \"\r\n              >\r\n                {{ capitalize(props.item[disabledProperty]) }}\r\n              </div>\r\n\r\n              <div\r\n                class=\"mb-n7 mt-n2 pa-0\"\r\n                v-if=\"\r\n                  schema.properties[field.name] &&\r\n                    schema.properties[field.name].template &&\r\n                    !editable.includes(field)\r\n                \"\r\n              >\r\n                {{ getTemplate(props.item, field) }}\r\n              </div>\r\n              <!-- pa-2 mb-6 full-width -->\r\n              <div :class=\"$vuetify.breakpoint.mdAndUp ? '' : ''\">\r\n                <v-form-component\r\n                  v-if=\"\r\n                    schema.properties[field.name] &&\r\n                      ((schema.properties[field.name] &&\r\n                        !schema.properties[field.name].template &&\r\n                        props.item._id != newRowId &&\r\n                        !schema.properties[field.name].NoFirstRowEditable &&\r\n                        directEdit &&\r\n                        field.directEdit != false &&\r\n                        (props.item._id || tableInsertable) &&\r\n                        ((!disabledProperty && schema.properties[field.name]) ||\r\n                          props.item[disabledProperty] != disabledValue)) ||\r\n                        (props.item._id == newRowId &&\r\n                          !schema.properties[field.name].NoFirstRowEditable &&\r\n                          tableInsertable &&\r\n                          !field.directEdit) ||\r\n                        (!directEdit && field.directEdit == true))\r\n                  \"\r\n                  :ref=\"field.name\"\r\n                  :mainTab=\"formMainTab\"\r\n                  :name=\"field.name\"\r\n                  :model=\"props.item\"\r\n                  :parentModel=\"props.item\"\r\n                  :parModel=\"formModel\"\r\n                  :schema=\"getSchema(field, props.item)\"\r\n                  :parentSchema=\"parObject || {}\"\r\n                  :parentSchemaObject=\"getParentSchema()\"\r\n                  :inLine=\"true\"\r\n                  :k=\"field.name\"\r\n                  :inserted=\"tableInsertable\"\r\n                  class=\"mb-n8 mt-n2 pa-0 ml-6\"\r\n                  :compclass=\"'mb-n4 mt-n2 pa-0'\"\r\n                  :placeholder=\"schema.properties[field.name].title\"\r\n                  :click=\"selectCtl\"\r\n                  :defaultDataFn=\"defaultDataFn\"\r\n                  :onValueChange=\"onValueChange\"\r\n                  :hasParent=\"hasParent\"\r\n                ></v-form-component>\r\n              </div>\r\n            </div>\r\n          </template>\r\n\r\n          <template\r\n            v-if=\"link && link.field\"\r\n            :slot=\"[`item.` + link.field]\"\r\n            slot-scope=\"props\"\r\n          >\r\n            <router-link\r\n              :to=\"{\r\n                name: link.name + '_' + props.item[link.field],\r\n                params: { id: props.item[link.field] }\r\n              }\"\r\n            >\r\n              <div\r\n                @click=\"\r\n                  linkClick ? linkClick(props.item) : myLinkClick(props.item)\r\n                \"\r\n              >\r\n                {{ props.item[link.field] }}\r\n              </div>\r\n            </router-link>\r\n          </template>\r\n\r\n          <template\r\n            v-if=\"tableEditRow || actionCommand\"\r\n            slot=\"item.actions\"\r\n            slot-scope=\"props\"\r\n          >\r\n            <!-- <v-row> -->\r\n\r\n            <v-toolbar style=\"background-color: transparent\" flat>\r\n              <v-spacer></v-spacer>\r\n              <v-btn\r\n                v-if=\"tableEditRow\"\r\n                @click=\"editCurrentRecord(props.item)\"\r\n                icon\r\n              >\r\n                <v-icon>mdi-pencil</v-icon>\r\n              </v-btn>\r\n\r\n              <component\r\n                v-for=\"(c, i) in editControls\"\r\n                :key=\"i\"\r\n                small\r\n                class=\"ml-0\"\r\n                :is=\"c[`comp`]\"\r\n                :ref=\"c[`id`]\"\r\n                :id=\"c[`id`]\"\r\n                :formModel=\"props.item\"\r\n                v-bind=\"c[`v-bind`]\"\r\n              />\r\n              <v-tooltip v-for=\"(c, i) in actionCommand\" :key=\"i\" bottom>\r\n                <template v-slot:activator=\"{ on }\">\r\n                  <v-badge\r\n                    bordered\r\n                    :content=\"props.item[c.badge]\"\r\n                    :value=\"props.item[c.badge] ? true : false\"\r\n                    class=\"custom-badge-position\"\r\n                    color=\"error\"\r\n                    overlap\r\n                  >\r\n                    <v-btn\r\n                      @click=\"\r\n                        c.action\r\n                          ? c.action(props.item)\r\n                          : customAction(props.item, c.actionName)\r\n                      \"\r\n                      :color=\"c.color\"\r\n                      v-on=\"on\"\r\n                      icon\r\n                    >\r\n                      <v-icon v-if=\"c.icon\">{{ c.icon }}</v-icon>\r\n                      <div v-if=\"c.commandText\">\r\n                        {{ c.commandText(props.item) }}\r\n                      </div>\r\n                    </v-btn>\r\n                  </v-badge>\r\n                </template>\r\n                {{ c.text }}\r\n                <!-- -->\r\n              </v-tooltip>\r\n            </v-toolbar>\r\n            <!-- </v-row> -->\r\n            <!-- <v-row v-else> </v-row> -->\r\n          </template>\r\n\r\n          <template\r\n            slot=\"item.data-table-expand\"\r\n            slot-scope=\"{ item, expand, isExpanded }\"\r\n          >\r\n            <!-- {{ expand }}{{ isExpanded }} -->\r\n            <v-tooltip bottom>\r\n              <template v-slot:activator=\"{ on }\">\r\n                <v-icon\r\n                  ref=\"expandIcon\"\r\n                  v-on=\"on\"\r\n                  v-if=\"item._id\"\r\n                  @click=\"\r\n                    expand(!isExpanded);\r\n                    doExpand(item, isExpanded);\r\n                  \"\r\n                >\r\n                  {{\r\n                    isExpanded\r\n                      ? \"mdi-arrow-up-drop-circle-outline\"\r\n                      : \"mdi-arrow-down-drop-circle-outline\"\r\n                  }}\r\n                </v-icon>\r\n              </template>\r\n              <span>More Detail</span>\r\n            </v-tooltip>\r\n          </template>\r\n\r\n          <template v-slot:expanded-item=\"{ headers, item }\">\r\n            <td\r\n              class=\"ma-0 pa-0\"\r\n              style=\"height: auto; overflow: hidden\"\r\n              :colspan=\"headers.length\"\r\n            >\r\n              <v-container>\r\n                <v-row\r\n                  :key=\"dropKey\"\r\n                  class=\"drop-zone\"\r\n                  align=\"start\"\r\n                  justify=\"start\"\r\n                >\r\n                  <v-col\r\n                    v-for=\"(d, i) in sortedDraggedObjects(item)\"\r\n                    :key=\"d._id\"\r\n                    :draggable=\"true\"\r\n                    @dragover.prevent=\"onDragOver($event, i)\"\r\n                    @dragstart=\"onDragStart(d, i)\"\r\n                    @drop=\"onDropItem(item, i)\"\r\n                  >\r\n                    <v-card\r\n                      v-html=\"\r\n                        droppedObjectTemplate ? droppedObjectTemplate(d, i) : ''\r\n                      \"\r\n                    ></v-card>\r\n                  </v-col>\r\n                </v-row>\r\n              </v-container>\r\n\r\n              <!-- <v-card class=\"pa-3\">\r\n                <v-card-text>\r\n                  <div\r\n                    class=\"drop-zone\"\r\n                    @dragover.prevent=\"onDragOver\"\r\n                    @drop=\"onDrop(item)\"\r\n                  >\r\n                    Drop Here {{ dropName }}\r\n                  </div>\r\n                </v-card-text>\r\n              </v-card> -->\r\n            </td>\r\n          </template>\r\n\r\n          <template slot=\"footer\">\r\n            <hr v-if=\"totalFields\" />\r\n            <table\r\n              v-if=\"totalFields\"\r\n              class=\"v-data-table mt-2\"\r\n              style=\"width: 100%\"\r\n            >\r\n              <tr>\r\n                <td\r\n                  align=\"right\"\r\n                  v-for=\"(header, j) in filteredHeaders\"\r\n                  :key=\"j\"\r\n                >\r\n                  <span v-for=\"(f, i) in tableTotal\" :key=\"i\">\r\n                    <strong>\r\n                      <span\r\n                        class=\"mr-6\"\r\n                        v-if=\"tableTotal[i]['field'] == header.value\"\r\n                      >\r\n                        {{ parseFloat(tableTotal[i][\"total\"]).toFixed(2) }}\r\n                      </span>\r\n                    </strong>\r\n                  </span>\r\n                  <!-- You can insert any content or calculation here -->\r\n                </td>\r\n              </tr>\r\n            </table>\r\n\r\n            <div class=\"fixed-footer\">\r\n              <tr>\r\n                <td v-if=\"editedItem && !tableInsertable\"></td>\r\n\r\n                <td v-if=\"editedItem && !tableInsertable\">\r\n                  <v-table-edited-item\r\n                    :editedItem=\"editedItem\"\r\n                    :isNew=\"isNew\"\r\n                    :onValueChange=\"onValueChange\"\r\n                    :save=\"save\"\r\n                    ref=\"edit_combo\"\r\n                  ></v-table-edited-item>\r\n                </td>\r\n              </tr>\r\n              <!-- <table style=\"width:100%\" v-if=\"tableInsertable\">\r\n          <tr> -->\r\n              <hr />\r\n              <!-- <v-toolbar\r\n            v-if=\"!hideFooter\"\r\n            flat\r\n            :color=\"$vuetify.breakpoint.smAndDown ? 'grey lighten-3' : ''\"\r\n\r\n          > -->\r\n            </div>\r\n\r\n            <!-- </v-toolbar> -->\r\n          </template>\r\n          <!-- <template\r\n          v-if=\"breakpoint && $vuetify.breakpoint.smAndDown && itemTemplate\"\r\n          v-slot:item=\"{ item, headers }\"\r\n        >\r\n          <v-row class=\"ma-2\" v-for=\"h in headers\" :key=\"h.value\">\r\n            <v-col\r\n              v-if=\"\r\n                (selectDelete && !noDelete && item._id != newRowId) ||\r\n                  select ||\r\n                  singleSelect ||\r\n                  selectSwitch\r\n              \"\r\n              style=\"max-width: 25px; overflow: hidden\"\r\n            >\r\n\r\n              <v-checkbox\r\n                class=\"mt-0 mb-n4\"\r\n                v-if=\"\r\n                  (item._id && !disabledProperty) ||\r\n                    (disabledValue &&\r\n                      item[disabledProperty] !== disabledValue) ||\r\n                    (!disabledValue && !item[disabledProperty])\r\n                \"\r\n                v-model=\"item.isSelected\"\r\n                @change=\"\r\n                  log(item);\r\n                  item.select($event);\r\n                \"\r\n              ></v-checkbox\r\n            ></v-col>\r\n            <v-col>{{ h.text }}</v-col>\r\n            <v-col>{{ item[h.value] }}</v-col>\r\n          </v-row>\r\n\r\n        </template> -->\r\n\r\n          <template\r\n            v-if=\"$root.isMobile && mobileViewTemplate && breakpoint\"\r\n            v-slot:item=\"{ item, index }\"\r\n          >\r\n            <v-mobile-view-table-template\r\n              :tableName=\"tableName\"\r\n              :item=\"item\"\r\n              :index=\"index\"\r\n              :getItemColor=\"getItemColor ? getItemColor : null\"\r\n              :editCurrentRecord=\"editCurrentRecord\"\r\n              :linkClick=\"linkClick\"\r\n              :getTemplate=\"getTemplate\"\r\n              :parentObject=\"parentObject\"\r\n            ></v-mobile-view-table-template>\r\n          </template>\r\n\r\n          <!-- <template v-slot:no-data>\r\n            <v-card>\r\n              No Data\r\n              <v-icon large> mdi-table-off </v-icon>\r\n            </v-card>\r\n          </template> -->\r\n        </v-data-table>\r\n      </div>\r\n\r\n      <!-- pageCount: {{ pageCount }} currentPage:{{ currentPage }} -->\r\n      <!-- <v-pagination>\r\n      v-model=\"currentPage\" :length=\"pageCount\"\r\n    </v-pagination> -->\r\n      <d-list\r\n        width=\"100%\"\r\n        v-if=\"dList\"\r\n        :key=\"listKey\"\r\n        :data_object=\"data_object\"\r\n        :editData=\"editData\"\r\n        :editRec=\"editRec\"\r\n      ></d-list>\r\n\r\n      <excel-table\r\n        v-if=\"dExcel\"\r\n        :key=\"excelKey\"\r\n        :table=\"table\"\r\n        :headers=\"headers\"\r\n        :data_object=\"data_object\"\r\n        :columnWidth=\"excelColumnWidth\"\r\n        ref=\"excel_table\"\r\n        v-model=\"selected\"\r\n        class=\"mt-n4\"\r\n      ></excel-table>\r\n      <!-- <v-btn @click=\"assignId()\">assign id </v-btn> -->\r\n      <v-snackbar\r\n        v-if=\"successMessage\"\r\n        v-model=\"successMessage\"\r\n        :timeout=\"5000\"\r\n        color=\"success\"\r\n      >\r\n        {{ successMessage }}\r\n\r\n        <template v-slot:action=\"{ attrs }\">\r\n          <v-btn text v-bind=\"attrs\" @click=\"successMessage = false\">\r\n            Close\r\n          </v-btn>\r\n        </template>\r\n      </v-snackbar>\r\n      <!-- <v-alert\r\n      class=\"ma-4\"\r\n      dismissible\r\n      timeout=\"3000\"\r\n      v-if=\"successMessage != '' && !noAlert\"\r\n      type=\"success\"\r\n    >\r\n      {{ successMessage }}\r\n    </v-alert> -->\r\n      <v-alert\r\n        class=\"ma-4\"\r\n        timeout=\"3000\"\r\n        dismissible\r\n        v-if=\"errorMessage != '' && errorMessage\"\r\n        type=\"error\"\r\n      >\r\n        {{ errorMessage }}\r\n      </v-alert>\r\n      <v-app-bar v-if=\"$root.isMobile\" class=\"bottom-bar\" bottom :app=\"true\">\r\n        <v-toolbar flat>\r\n          <v-pager\r\n            v-if=\"\r\n              tableReady &&\r\n                !hideFooter &&\r\n                table.length > 10 &&\r\n                !editDisablePagination &&\r\n                !disablePagination\r\n            \"\r\n            :pageStart=\"pageStart\"\r\n            :pageStop=\"pageStop\"\r\n            :itemsLength=\"itemsCount\"\r\n            :navigate=\"navigate\"\r\n            :page=\"page\"\r\n          ></v-pager>\r\n        </v-toolbar>\r\n      </v-app-bar>\r\n    </div>\r\n    <v-dialog class=\"assistant\" v-model=\"assistantModel\" width=\"600\">\r\n      <v-ai-chat\r\n        v-if=\"assistantVBind.customInstructions\"\r\n        v-bind=\"assistantVBind\"\r\n      ></v-ai-chat>\r\n    </v-dialog>\r\n  </div>\r\n</template>\r\n\r\n<script>\r\n// import vuetify from \"vuetify\";\r\nimport \"vuetify/dist/vuetify.min.css\";\r\n\r\nimport axios from \"axios\";\r\nimport Sortable from \"sortablejs\";\r\nimport draggable from \"vuedraggable\";\r\nimport arrive from \"arrive\";\r\nimport { mergeProps } from \"vue\";\r\nimport * as fun from \"../plugins/common\";\r\n\r\nexport default {\r\n  name: \"DTable\",\r\n  props: {\r\n    data_object: Object,\r\n    vModel: [Object, Array],\r\n    editable: {\r\n      type: Array,\r\n      default: function() {\r\n        return [];\r\n      }\r\n    },\r\n\r\n    table_title: String,\r\n    tableName: String,\r\n    addButtonCaption: String,\r\n    addButtonKey: String,\r\n    newItemTitle: String,\r\n    new_data: Object,\r\n    rowClick: Function,\r\n    linkClick: Function,\r\n    selectSwitch: Boolean,\r\n    editData: [Array, Object],\r\n    getTotal: Function,\r\n    rowIcons: Function,\r\n    parentKey: String,\r\n    allParentKeys: Array,\r\n    toolBarControls: Array,\r\n    editControls: Array,\r\n    toolBarExpandedControls: Array,\r\n    itemsPerPage: {\r\n      type: [Number, String]\r\n    },\r\n    itemSelected: Function,\r\n    toolbarRight: Boolean,\r\n    hasSearch: Boolean,\r\n    remoteSearch: Boolean,\r\n    remoteSearchFields: Array,\r\n    numericFields: Array,\r\n    searchLen: Number,\r\n    beforeSubmit: Function,\r\n    afterSubmit: Function,\r\n    beforeSave: Function,\r\n    afterSave: Function,\r\n    onValueChange: Function,\r\n    doSubmit: Boolean,\r\n    dList: Boolean,\r\n    dListData: Array,\r\n    dExcel: Boolean,\r\n    fixedHeader: Boolean,\r\n    hideTitle: Boolean,\r\n    tableHeight: [String, Number],\r\n    hideFooter: Boolean,\r\n    hideHeader: Boolean,\r\n    allExpanded: Boolean,\r\n    disablePagination: Boolean,\r\n    noServerPagination: Boolean,\r\n    mobileBreakpoint: String,\r\n    alwaysUpdate: Boolean,\r\n    allEditable: Boolean,\r\n    directEdit: Boolean,\r\n    getTable: Function,\r\n    ajustTableSchema: Function,\r\n    editedItem: Object,\r\n    onRowUpdate: Function,\r\n    beforeAddData: Function,\r\n    onLoad: Function,\r\n    onMount: Function,\r\n    onDataChange: Function,\r\n    getFreshData: Boolean,\r\n    excelColumnWidth: String,\r\n    formModel: [Object, Array],\r\n    parentModel: Object,\r\n    fields_excluded: Array,\r\n    fields_included: Array,\r\n    expandedIndexes: Array,\r\n    editRow: Boolean,\r\n    editRecord: Function,\r\n    initialData: Array,\r\n    tblKey: String,\r\n    groupName: Function,\r\n    expandable: Boolean,\r\n    additionalData: Array,\r\n    k: String,\r\n    expansionColumns: Number,\r\n    insertable: Boolean,\r\n    noDelete: Boolean,\r\n    noSave: Boolean,\r\n    disabledProperty: String,\r\n    disabledValue: String,\r\n    parObject: Object,\r\n    parTable: Array,\r\n    parentObject: [Object, Array],\r\n    defaultModel: Object,\r\n    isDraggable: Boolean,\r\n    disableSort: Boolean,\r\n    singleSelect: Boolean,\r\n    noToolBar: Boolean,\r\n    skipRecalculation: Boolean,\r\n    saveButtonCaption: String,\r\n    noAdditionalMenu: Boolean,\r\n    assistant_instructions: String,\r\n    link: {\r\n      type: Object,\r\n      default: function() {\r\n        return {};\r\n      }\r\n    },\r\n    noInitEdit: Boolean,\r\n    isGoToButton: Boolean,\r\n    goToButtonText: String,\r\n    goToButtonAction: Function,\r\n    onDataReceived: Function,\r\n    getRowClass: {\r\n      Function,\r\n      String\r\n    },\r\n    coloredFields: Array,\r\n    dialogFields: Array,\r\n    getItemColor: [Function, String],\r\n    colorProperty: String,\r\n    filterTabs: Array,\r\n    filterTabsFn: [String, Function, Object],\r\n    noTabs: Boolean,\r\n    noExcel: Boolean,\r\n    filterCondition: String,\r\n    // filterFunction: Function,\r\n    searchableColumns: Array,\r\n    focusOnInsert: String,\r\n    showGroupBy: Boolean,\r\n    filterTable: Function,\r\n    filter: String,\r\n    cssClass: String,\r\n    selectedId: String,\r\n    mData: Array,\r\n    serverPagination: Boolean,\r\n    sortBy: [String, Array],\r\n    customSort: Function,\r\n    customSortItems: Array,\r\n    sortDesc: Boolean,\r\n    onRowDragDrop: Function,\r\n    dropItem: Function,\r\n    noAlert: Boolean,\r\n    customFilter: Function,\r\n    refreshAfterSubmit: Boolean,\r\n    noCache: Boolean,\r\n    showFilterCombo: Boolean,\r\n    filterComboLabel: String,\r\n    hideAllTabFilter: Boolean,\r\n    updateNestedArray: Boolean,\r\n    hasAdvancedSearch: Boolean,\r\n    noRefreshAfterUpload: Boolean,\r\n    noRefreshButton: Boolean,\r\n    noRefreshButtonTitle: Boolean,\r\n    limitTabsToData: Boolean,\r\n    limitObject: String,\r\n    actionCommand: Array,\r\n    editedItemTitle: Array,\r\n    idField: String,\r\n    columnTool: Boolean,\r\n    refreshParent: Function,\r\n    hideTopBar: Boolean,\r\n    draggedIndex: null,\r\n    dropItemHandling: Function,\r\n    droppedObjectsSortProperty: String,\r\n    defaultTabCaption: String,\r\n    defaultTabColor: String,\r\n    mobileItemTemplate: Function,\r\n    hideEditedTabs: Boolean,\r\n    hideFilterTabs: Boolean,\r\n    copyRecords: Boolean,\r\n    disableChildEdit: Boolean,\r\n    defaultDataFn: String,\r\n    groupByItems: Array,\r\n    noGroups: Boolean,\r\n    vBind: Object,\r\n    readonly: Boolean,\r\n    NoFirstRowEditable: Boolean,\r\n    minSearchLength: Number,\r\n    totalFields: Array,\r\n    validate: String,\r\n    noHorizontalScroll: Boolean,\r\n    hideScroll: Boolean,\r\n    noAddOnAllTab: Boolean,\r\n    autoSave: Boolean,\r\n    hideAllInCombo: Boolean,\r\n    refreshHeadersOnFormChange: Boolean,\r\n    parentProperty: String,\r\n    noTabSort: Boolean,\r\n    defaultDataObject: Object,\r\n    mobileViewTemplate: Boolean,\r\n    addMenuButton: Object,\r\n    noFullScreen: Boolean,\r\n    formMainTab: Number,\r\n    deleteId: String,\r\n    toolBarItemsExcluded: Array,\r\n    hasParent: Boolean,\r\n    getItems: Boolean,\r\n    scrollOnNew: String,\r\n    searchAfterCompleted: Boolean,\r\n    helpText: String,\r\n    helpTitle: String,\r\n    useTabs: Boolean,\r\n    maxRecords: Number,\r\n    droppedObjects: Array,\r\n    droppedObjectTemplate: Function,\r\n    droppedObjectFilterProperty: String,\r\n    expandedItemsTitle: String,\r\n    dropName: String,\r\n    addRecordWithLink: Object,\r\n    qry: null,\r\n    columns: Array,\r\n    hasAssistant: Boolean\r\n  },\r\n\r\n  components: {\r\n    VLoading: () => import(\"../components/Loading.vue\"),\r\n    VCombo: () => import(\"./ComboBox.vue\"),\r\n    VFormComponent: () => import(\"./FormComponent.vue\"),\r\n    DList: () => import(\"../components/List.vue\"),\r\n    DForm: () => import(\"../components/Form.vue\"),\r\n    VAccordion: () => import(\"../components/Accordion.vue\"),\r\n    VDateRangePicker: () => import(\"../components/DateRangePicker.vue\"),\r\n    VUpload: () => import(\"../components/UploadDragDrop.vue\"),\r\n    USMap: () => import(\"../components/USMap.vue\"),\r\n    SelectTable: () => import(\"../components/SelectTable.vue\"),\r\n    VRadioList: () => import(\"../components/RadioList.vue\"),\r\n    VAddLabor: () => import(\"../components/AddLabor.vue\"),\r\n    VCustomButton: () => import(\"../components/CustomButton.vue\"),\r\n    VDateTime: () => import(\"./DateTime.vue\"),\r\n    VFormCard: () => import(\"../components/FormCard.vue\"),\r\n    VUnitCharge: () => import(\"../components/UnitCharge.vue\"),\r\n    VAddToTableButton: () => import(\"../components/AddToTableButton.vue\"),\r\n    VTreeInput: () => import(\"../components/TreeInput.vue\"),\r\n    VEditor: () => import(\"../components/Editor.vue\"),\r\n    SendLetter: () => import(\"../components/SendLetter.vue\"),\r\n    VTableEditedItem: () => import(\"../components/TableEditedItem.vue\"),\r\n    DataTableRowHandler: () => import(\"../components/DataTableRowHandler.vue\"),\r\n    VMenuButton: () => import(\"../components/MenuButton.vue\"),\r\n    ChangeRates: () => import(\"../components/ChangeRates.vue\"),\r\n    VLabelButton: () => import(\"../components/LabelButton.vue\"),\r\n    VFormToolBar: () => import(\"../components/FormToolBar.vue\"),\r\n    VDialogTable: () => import(\"../components/DialogTable.vue\"),\r\n    VCrew: () => import(\"../components/Crew.vue\"),\r\n    VTextDialog: () => import(\"../components/TextDialog.vue\"),\r\n    VTableSearch: () => import(\"../components/TableSearch.vue\"),\r\n    VTakePhoto: () => import(\"../components/TakePhoto.vue\"),\r\n    VArray: () => import(\"../components/Array.vue\"),\r\n    VAiChat: () => import(\"../components/AIChat.vue\"),\r\n    VMobileViewTableTemplate: () =>\r\n      import(\"../components/UI/MobileViewTableTemplate.vue\"),\r\n    VPager: () => import(\"../components/UI/Pager.vue\"),\r\n    // VColumns: () => import(\"../components/Columns.vue\"),\r\n    draggable\r\n  },\r\n  data() {\r\n    return {\r\n      lastSavedCustomQry: null,\r\n      assistantVBind: {\r\n        hideAssistantsList: true,\r\n        hideNewChat: true,\r\n        noStreaming: true,\r\n        defaultMessage: \"Building Search Query\",\r\n        defaultToolTip: \"Describe me your search criteria\",\r\n        listHeight: 100\r\n      },\r\n      assistantModel: 0,\r\n      myLinkClick: null,\r\n      testItems: [\r\n        {\r\n          _id: 111,\r\n          color: \"#fff\"\r\n        }\r\n      ],\r\n      initialQry: null,\r\n\r\n      assistantQry: null,\r\n      tabQry: null,\r\n      searchLabel: \"Search\",\r\n      tableReady: false,\r\n      activeTab: null,\r\n      breakpoint: null,\r\n      tabFilter: null,\r\n      selectDelete: false,\r\n      mapDialog: false,\r\n      mapDialogWidth: 0,\r\n      mapDialogHeight: 0,\r\n      curTable: null,\r\n      dialog: false,\r\n      successMessage: false,\r\n      errorMessage: false,\r\n      headers: [],\r\n      computedHeaders: [],\r\n      selected: [],\r\n      table: [],\r\n      pagerKey: 0,\r\n      tableKey: 0,\r\n      originalRecords: [],\r\n      schema: {},\r\n      sending: false,\r\n      showSelect: true,\r\n      search: \"\",\r\n      snack: false,\r\n      snackColor: \"\",\r\n      snackText: \"\",\r\n      groupBy: [],\r\n      totalKey: \"\",\r\n      formKey: 0,\r\n      expandedKey: 0,\r\n      formObject: {},\r\n      model: {},\r\n      init: false,\r\n      isNew: true,\r\n      isEditedNew: false,\r\n      listKey: 0,\r\n      excelKey: 0,\r\n      loading: false,\r\n      tooltip: null,\r\n      defaultItem: null,\r\n      dObject: Object,\r\n      options: {\r\n        debug: true,\r\n        disableAll: false,\r\n        autoFoldObjects: true\r\n      },\r\n      editedItemPlaceholder: \"\",\r\n      totals: null,\r\n      capitalizable: [],\r\n      expanded: [],\r\n      // expandable: false,\r\n      expand: false,\r\n      transitioned: [],\r\n      closeTimeouts: {},\r\n      editedClass: \"mb-n6 mt-n2\",\r\n      newRow: {},\r\n      insertedRow: null,\r\n      insertNewRow: false,\r\n      newRowInserted: false,\r\n      observer: null,\r\n      rowAdded: false,\r\n      expandedObjects: [],\r\n      compKey: 0,\r\n      page: 1,\r\n      pageCount: 1,\r\n      currentPage: 1,\r\n      itemsLength: 1,\r\n      pageStart: 1,\r\n      pageStop: 1,\r\n      editDialog: false,\r\n      qryExplanation: \"\",\r\n      newRowId: \"\",\r\n      sortDisabled: false,\r\n      allTableExpanded: false,\r\n      comboFilterItems: [],\r\n      currentFilter: 0,\r\n      pagination: {},\r\n      blankRowModel: {},\r\n      filterItems: [],\r\n      filterCond: \"\",\r\n      propertyList: [],\r\n      addTableKey: 0,\r\n      dModel: {},\r\n      select: false,\r\n      editedId: \"\",\r\n      additionalModel: null,\r\n      hideControls: false,\r\n      customBtnLoading: false,\r\n      form: null,\r\n      update: {\r\n        add: [],\r\n        update: [],\r\n        delete: []\r\n      },\r\n      comboCurrentFilter: {},\r\n      showAdvancedSearch: false,\r\n      searchModel: {},\r\n      xllink: \"\",\r\n      editedTabs: [],\r\n      edited: 0,\r\n      currentForm: null,\r\n      childEdited: false,\r\n      editedTabsKey: 0,\r\n      columnId: null,\r\n      editTitle: \"\",\r\n      mobileHeaders: [],\r\n      copyMenu: false,\r\n      duplicateValues: null,\r\n      hasUpload: false,\r\n      upload: false,\r\n      uploadFields: [],\r\n      uploadFieldsInitialTitle: \"Use excel file with the following fields:\",\r\n      itemsPerPageEdited: 0,\r\n      pager: false,\r\n      serverItemsLength: -1,\r\n      itemsPerPageChanged: false,\r\n      editDisablePagination: false,\r\n      delBtnKey: 0,\r\n      toolMenu: false,\r\n      filterChanged: false,\r\n      toolbarKey: 0,\r\n      groupByItemsReady: false,\r\n      searchDone: false,\r\n      toolBarKey: 0,\r\n      footerKey: 0,\r\n      serverPaginationDone: false,\r\n      doServerPagination: false,\r\n      filterComboKey: 0,\r\n      rowClassFn: null,\r\n      specialFields: [],\r\n      disableSave: false,\r\n      searchTabQuery: \"\",\r\n      tabSearchDialog: false,\r\n      tabKey: 0,\r\n      dialogModel: true,\r\n      tableInsertable: false,\r\n      keepHeaders: false,\r\n      initialHideHeaders: null,\r\n      mobileList: \"\",\r\n      menuModel: false,\r\n      helpModel: false,\r\n      searchMenuModel: false,\r\n      searchModelKey: 0,\r\n      additionalTabs: null,\r\n      additionalTab: 0,\r\n      editMode: false,\r\n      insertMode: false,\r\n      menuOpen: false,\r\n      hasDefaultTab: 0,\r\n      dropKey: 0,\r\n      filteredTabModel: 0,\r\n      searchBarKey: 0,\r\n      filterModel: null,\r\n      isFullScreen: false,\r\n      closeMenuOnClick: false,\r\n      menuItems: [],\r\n      menuButtonKey: false,\r\n      sortCriteria: [],\r\n      currentSortBy: [], // This will hold the current sort column(s)\r\n      currentSortDesc: [],\r\n      wrapHeight: \"\"\r\n    };\r\n  },\r\n  methods: {\r\n    toggleFullScreen() {\r\n      this.isFullScreen = !this.isFullScreen;\r\n    },\r\n    buildSearchQuery() {\r\n      // Create an array of conditions for remoteSearchFields using regex\r\n      const regexConditions = this.remoteSearchFields\r\n        .filter(field => !(this.numericFields || []).includes(field)) // Exclude numericFields from regex\r\n        .map(field => {\r\n          return {\r\n            [field]: {\r\n              $regex: this.search,\r\n              $options: \"i\" // Case-insensitive regex search\r\n            }\r\n          };\r\n        });\r\n\r\n      // Create an array of conditions for numericFields using exact match\r\n      const numericConditions = (this.numericFields || []).map(field => {\r\n        return {\r\n          [field]: parseInt(this.search) // Exact match for numeric fields\r\n        };\r\n      });\r\n\r\n      // Combine all conditions\r\n      const searchConditions = [...regexConditions, ...numericConditions];\r\n\r\n      // Construct the MongoDB query\r\n      if (this.initialQry) {\r\n        const myQry = {}; // Clone the initial query\r\n\r\n        if (!this.initialQry[\"$and\"]) {\r\n          myQry[\"$and\"] = [fun.clone(this.initialQry)];\r\n        }\r\n        if (!myQry[\"$and\"]) {\r\n          myQry[\"$and\"] = [fun.clone(this.initialQry)];\r\n        }\r\n        myQry[\"$and\"].push({ $or: searchConditions });\r\n        return myQry;\r\n      }\r\n\r\n      return {\r\n        $or: searchConditions\r\n      };\r\n    },\r\n\r\n    mergeProps,\r\n    itemTemplate(item, headers) {\r\n      if (this.mobileItemTemplate) {\r\n        return this.mobileItemTemplate(item, headers);\r\n      } else {\r\n        var rows = \"\";\r\n        headers.forEach(h => {\r\n          if (item[h.value]) {\r\n            rows += fun.format(\r\n              \"<tr><td style='white-space:noWrap;margin-right:20px'><b>{0}:&nbsp;</b></td><td>{1}</td></tr>\",\r\n              h.text,\r\n              item[h.value] || \"\"\r\n            );\r\n          }\r\n        });\r\n\r\n        var t = fun.format(\r\n          \"<table style='width:100%'>{0}</table><hr/><br/>\",\r\n          rows\r\n        );\r\n\r\n        // return t;\r\n        return false;\r\n      }\r\n    },\r\n    customAction(item, actionName) {\r\n      this.$root.$emit(actionName, {\r\n        item: item,\r\n        obj: this\r\n      });\r\n      console.log(actionName, item);\r\n    },\r\n\r\n    resetColumns() {\r\n      var data = {\r\n        object_name: \"columns\",\r\n        ids: [this.columnId]\r\n      };\r\n\r\n      axios\r\n        .post(this.serverURL + \"/delete_records\", data, {\r\n          withCredentials: true\r\n        })\r\n        .then(response => {\r\n          this.tableMount();\r\n        });\r\n    },\r\n    saveCustomQry(q) {\r\n      var that = this;\r\n\r\n      var data = {\r\n        metadata: {\r\n          object_name: \"custom_qry\"\r\n        },\r\n\r\n        model: {\r\n          caption: q.caption,\r\n          description: q.description,\r\n          qry: this.assistantQry,\r\n          table_name: this.tableName,\r\n          user_id: this.$root.user_id\r\n        }\r\n      };\r\n      if (fun.compareObjects(this.lastSavedCustomQry, data.model)) {\r\n        return;\r\n      } else {\r\n        this.lastSavedCustomQry = data.model;\r\n      }\r\n\r\n      this.qryExplanation = q.description;\r\n      axios\r\n        .post(this.serverURL + \"/add_data\", data, {\r\n          withCredentials: true\r\n        })\r\n        .then(response => {\r\n          console.log(response.data);\r\n          this.successMessage = \"Custom query created\";\r\n          // this.toolMenu = false;\r\n        });\r\n    },\r\n    saveColumns() {\r\n      var that = this;\r\n      if (!this.columnId) {\r\n        this.columnId = fun.guid();\r\n      }\r\n      var data = {\r\n        metadata: {\r\n          object_name: \"columns\"\r\n        },\r\n\r\n        model: {\r\n          _id: this.columnId,\r\n          headers: this.computedHeaders,\r\n          table_name: this.tableName,\r\n          user_id: this.$root.user_id\r\n        }\r\n      };\r\n      axios\r\n        .post(this.serverURL + \"/add_data\", data, {\r\n          withCredentials: true\r\n        })\r\n        .then(response => {\r\n          console.log(response.data);\r\n          this.successMessage = \"Columns updated\";\r\n          this.toolMenu = false;\r\n        });\r\n    },\r\n    getColumns() {\r\n      var columns = this.columns || this.additionalModel.columns;\r\n      if (columns.length && columns[0].headers.length) {\r\n        this.computedHeaders = columns[0].headers;\r\n        this.columnId = columns[0]._id;\r\n      } else {\r\n        this.computedHeaders.forEach(c => {\r\n          c.show = true;\r\n        });\r\n        this.tableKey = !this.tableKey;\r\n      }\r\n\r\n      // if (!this.tableName) {\r\n      //   return;\r\n      // }\r\n      // var data_object = {\r\n      //   object_name: \"columns\",\r\n      //   qry: {\r\n      //     table_name: this.tableName.toLowerCase(),\r\n      //     user_id: this.$root.user_id,\r\n      //   },\r\n      // };\r\n      // axios\r\n      //   .post(this.serverURL + \"/get_data\", data_object, {\r\n      //     withCredentials: true,\r\n      //   })\r\n      //   .then((response) => {\r\n      //     var data = response.data;\r\n      //     if (data.model.length && data.model[0].headers.length) {\r\n      //       this.computedHeaders = data.model[0].headers;\r\n      //       this.columnId = data.model[0]._id;\r\n      //     } else {\r\n      //       this.computedHeaders.forEach((c) => {\r\n      //         c.show = true;\r\n      //       });\r\n      //       this.tableKey = !this.tableKey;\r\n      //     }\r\n      //   });\r\n    },\r\n    tableMount() {\r\n      var that = this;\r\n      this.tableReady = false;\r\n      this.childEdited = this.disableChildEdit;\r\n\r\n      if (!this.itemsPerPageEdited) {\r\n        this.itemsPerPageEdited = this.itemsPerPage;\r\n      }\r\n      this.editDisablePagination = this.disablePagination;\r\n\r\n      // if (this.$vuetify.breakpoint.smAndDown) {\r\n      //   this.tableEditRow = this.editRow || this.insertable;\r\n      // } else {\r\n      this.tableEditRow = this.editRow;\r\n      this.tableInsertable = this.insertable;\r\n      // }\r\n      // this.columnId = fun.guid();\r\n      this.$root.$emit(\"tableInit\", this);\r\n      this.mapDialogWidth = window.innerWidth;\r\n      this.mapDialogHeight = window.innerHeight;\r\n      this.curTable = this;\r\n      if (this.filterTabs) {\r\n        this.getFilterParams(this);\r\n      }\r\n\r\n      if (this.onMount) {\r\n        this.onMount(this);\r\n        that.init = true;\r\n      }\r\n      this.$root.$on(\"responseFromAssistant\", d => {\r\n        console.log(d);\r\n        that.assistantQry = d.json.query || d.json;\r\n        console.log(that.assistantQry);\r\n        that.assistantModel = 0;\r\n        that.itemsCount = 0;\r\n        // if (!that.additionalModel.custom_qry) {\r\n        //   that.additionalModel.custom_qry = [];\r\n        // }\r\n        // that.additionalModel.custom_qry.push(d);\r\n        that.saveCustomQry(d);\r\n        that.loadFromDb();\r\n      });\r\n      this.$root.$on(\"activeTabChanged\", () => {\r\n        var curTab = this.$root.resentTabs[this.$root.activeTab];\r\n        // console.log(curTab);\r\n      });\r\n      this.$root.$on(\"dialogClose\", function() {\r\n        that.dialog = false;\r\n      });\r\n      this.$root.$on(\"dataChanged\", obj => {\r\n        if (obj.tableTitle == that.table_title) {\r\n          that.refresh();\r\n        }\r\n      });\r\n\r\n      this.$root.$on(\"data_changed\", m => {\r\n        if (m.dataChange) {\r\n          m.dataChange(that);\r\n        }\r\n      });\r\n      this.$root.$on(\"recalculateFields\", m => {\r\n        if (that.tableName == m.tableName) {\r\n          // that.getCalculatedFields();\r\n        }\r\n      });\r\n\r\n      this.$root.$on(\"filterTable\", m => {\r\n        if (that.tableName == m.tableName) {\r\n          that.table = that.originalRecords.filter(r => {\r\n            return m.func(r);\r\n          });\r\n          if (m.sort) {\r\n            that.sortTable(m.sort);\r\n          }\r\n        }\r\n      });\r\n      this.$root.$on(\"fileUploaded\", d => {\r\n        if (d.response.uploaded) {\r\n          this.successMessage = \"Data has been successfully imported\";\r\n        } else {\r\n          this.errorMessage = d.response;\r\n        }\r\n        this.upload = false;\r\n        if (this.noRefreshAfterUpload) {\r\n          return;\r\n        }\r\n        // if (d.response.object_name != \"templates\") {\r\n        //   this.refreshTable();\r\n        // }\r\n      });\r\n      that.showSelect = that.selectSwitch;\r\n\r\n      that.getData();\r\n\r\n      if (that.getTable) {\r\n        that.getTable(that);\r\n      }\r\n\r\n      this.getEditedItem();\r\n      this.setTotals();\r\n      this.resetForm();\r\n      if (!this.remoteSearch || (this.remoteSearch && this.maxRecords)) {\r\n        that.tableReady = true;\r\n      }\r\n\r\n      this.$root.$emit(\"tableMounted\", this);\r\n    },\r\n\r\n    doSearch() {\r\n      this.tableReady = true;\r\n      this.tableMount();\r\n\r\n      this.loadFromDb();\r\n    },\r\n    initEdit(item, edit) {\r\n      this.dObject.schema = this.schema;\r\n      // this.dObject[\"v-bind\"] = this.schema[\"v-bind\"];\r\n      this.dObject.objectName = this.objectName || this.data_object.object_name;\r\n      this.dObject.additionalModel = this.additionalModel;\r\n\r\n      // this.dObject.model = item;\r\n      this.dObject.parentModel = this.formModel;\r\n      // if (this.dObject.model && !item) {\r\n      //   this.dObject.model._id = fun.guid();\r\n      // }\r\n\r\n      // if (edit) {\r\n      this.getModel(item, edit);\r\n\r\n      this.formKey = !this.formKey;\r\n      return this.dObject.model;\r\n    },\r\n    refreshTable() {\r\n      this.tableMount();\r\n      this.edited = false;\r\n      // this.currentFilter = 1;\r\n      // this.currentFilter = 0;\r\n      // this.updateFilter();\r\n      // this.$forceUpdate();\r\n      // this.doTabFilter();\r\n      // this.tableKey = !this.tableKey;\r\n    },\r\n    doExpand(item, isExpanded) {\r\n      if (this.singleSelect && !isExpanded) {\r\n        this.selected = [];\r\n        this.selected.push(item);\r\n      }\r\n    },\r\n    onInsertControlCreated(itemName) {\r\n      if (this.focusOnInsert && itemName == this.focusOnInsert) {\r\n        // console.log(\"focus\", itemName);\r\n        //\r\n      }\r\n    },\r\n    toggleFilter(e) {\r\n      e.preventDefault();\r\n      console.log(e);\r\n    },\r\n    validateEntry(id, remove, fn) {\r\n      var that = this;\r\n      setTimeout(function() {\r\n        that.errorMessage = \"\";\r\n        var validationRules = [];\r\n        var valid = true;\r\n        var messages = [];\r\n        if (that.validate) {\r\n          var r = that.table.find(t => {\r\n            return t._id == id;\r\n          });\r\n\r\n          validationRules = eval(that.validate);\r\n        }\r\n        if (validationRules) {\r\n          validationRules.forEach(v => {\r\n            var rule = fun.getRule(v.rule.rules, v.rule.title);\r\n            if (rule) {\r\n              var invalidMessage = rule[0](r[v.name]);\r\n              if (invalidMessage && typeof invalidMessage == \"string\") {\r\n                messages.push(invalidMessage);\r\n              }\r\n            }\r\n          });\r\n          if (messages.length) {\r\n            that.errorMessage = messages.join(\"<br/>\");\r\n            valid = false;\r\n            if (remove) {\r\n              that.table = that.table.filter(item => item._id !== id);\r\n              that.originalRecords = that.originalRecords.filter(\r\n                item => item._id !== id\r\n              );\r\n              that.newRowId = null;\r\n            }\r\n          }\r\n        }\r\n        fn(valid);\r\n      }, 100);\r\n    },\r\n    applyRow(fromMenu) {\r\n      if (fromMenu) {\r\n        this.validateAndSave();\r\n        return;\r\n      }\r\n      var table = this.table;\r\n      var that = this;\r\n      var valid = this.validateEntry(this.newRowId, true, valid => {\r\n        if (valid) {\r\n          const model = that.table.find(t => {\r\n            return t._id == that.newRowId;\r\n          });\r\n          this.newRowId = \"\";\r\n          this.getCalculatedFields();\r\n          this.$root.$emit(\"rowAdded\", {\r\n            tbl: this\r\n          });\r\n          if (this.alwaysUpdate) {\r\n            this.save(model, false, true);\r\n            // this.submit();\r\n          }\r\n        }\r\n      });\r\n    },\r\n    hideToolBar(hide) {\r\n      this.hideControls = hide;\r\n    },\r\n    onDragOver(event) {\r\n      event.preventDefault(); // Necessary to allow a drop\r\n    },\r\n    onDragStart(item, index) {\r\n      event.dataTransfer.setData(\"text/plain\", JSON.stringify(item));\r\n      this.draggedIndex = index;\r\n      event.dataTransfer.effectAllowed = \"move\";\r\n      // return (event) => {\r\n      //   event.dataTransfer.setData('text/plain', item.name);\r\n      //   console.log(`Started dragging: ${item.name}`);\r\n      // };\r\n      // const draggableItems = Array.from(\r\n      //   event.currentTarget.querySelectorAll(\".draggable-item\")\r\n      // );\r\n\r\n      // // Find the index of the dragged element\r\n      // const draggedElement = event.target.closest(\".draggable-item\");\r\n      // this.draggedIndex = draggableItems.indexOf(draggedElement);\r\n    },\r\n    getDropTargetIndex(event) {\r\n      const targetElement = event.target.closest(\".draggable\");\r\n      if (!targetElement) return this.droppedObjects.length;\r\n\r\n      const targetId = Number(targetElement.getAttribute(\"data-id\"));\r\n      return this.droppedObjects.findIndex(item => item.id === targetId);\r\n    },\r\n\r\n    onDropItem(cont, index) {\r\n      event.stopPropagation(); // Prevent event from bubbling up\r\n      event.preventDefault(); // Ensure default behavior is blocked\r\n      let droppedItem = JSON.parse(event.dataTransfer.getData(\"text/plain\"));\r\n      this.dropItemHandling(cont, droppedItem, index, this);\r\n    },\r\n    onDrop(item) {\r\n      // Get all draggable items within the container\r\n      const draggableItems = Array.from(\r\n        event.currentTarget.querySelectorAll(\".draggable-item\")\r\n      );\r\n\r\n      let itemIndex = -1; // Index where the item should be dropped\r\n      const draggableRecordsId = []; // Array to track item IDs\r\n\r\n      // Find the currently hovered item and its ID\r\n      const curItem = event.currentTarget.querySelector(\"[data-id]\");\r\n      const curId = curItem ? curItem.getAttribute(\"data-id\") : null;\r\n\r\n      // Iterate through all draggable items to build IDs and find the target index\r\n      draggableItems.forEach((d, i) => {\r\n        const job = d.querySelector(\"[data-id]\");\r\n        const id = job.getAttribute(\"data-id\");\r\n        draggableRecordsId.push(id);\r\n\r\n        if (id === curId) {\r\n          itemIndex = i; // Set the target index\r\n        }\r\n      });\r\n\r\n      // If the dragged item exists in the records, update its position\r\n      const draggedIndex = this.droppedObjects.findIndex(\r\n        obj => obj.id === item.id\r\n      );\r\n\r\n      if (\r\n        draggedIndex !== -1 &&\r\n        itemIndex !== -1 &&\r\n        draggedIndex !== itemIndex\r\n      ) {\r\n        // Remove the dragged item from its current position\r\n        const [draggedItem] = this.droppedObjects.splice(draggedIndex, 1);\r\n\r\n        // Insert the dragged item into the new position\r\n        this.droppedObjects.splice(itemIndex, 0, draggedItem);\r\n\r\n        console.log(\"Updated Order:\", this.droppedObjects);\r\n      }\r\n\r\n      // Call the dropItem method with updated information\r\n      this.dropItem(event, \"\", item, draggableRecordsId, this.draggedIndex);\r\n    },\r\n\r\n    customFiltering(value, search, item) {\r\n      if (this.customFilter) {\r\n        return this.customFilter(value, search, item);\r\n      }\r\n      if (this.currentFilter) {\r\n        return this.filterItems[this.currentFilter - 1];\r\n      }\r\n    },\r\n    restoreSchema() {\r\n      // if (!this.parentKey) {\r\n      let objName = this.data_object.object_name;\r\n      if (!objName) {\r\n        return;\r\n      }\r\n      if (localStorage.getItem(objName)) {\r\n        let origSchema = JSON.parse(localStorage.getItem(objName));\r\n\r\n        Object.keys(this.schema.properties).forEach(k => {\r\n          delete this.schema.properties[k];\r\n        });\r\n        Object.keys(origSchema).forEach(k => {\r\n          this.schema.properties[k] = origSchema[k];\r\n        });\r\n      }\r\n\r\n      // }\r\n    },\r\n    validateAndSave(addNew, dontUpdateParent, keepOpen) {\r\n      this.restoreSchema();\r\n      this.isNew = addNew;\r\n      var model = this.dObject.model;\r\n      if (!model._id) {\r\n        model._id = fun.guid();\r\n      }\r\n\r\n      var exist = this.originalRecords.filter(r => {\r\n        return r._id == model._id;\r\n      });\r\n\r\n      this.errorMessage = \"\";\r\n      this.form = this.$refs[\"form\"].$refs[\"form\"].$refs[\"form\"];\r\n\r\n      var formReady = this.form.validate();\r\n\r\n      if (formReady) {\r\n        //\r\n        this.save(model, false, true);\r\n\r\n        if (this.edited && !keepOpen) {\r\n          this.removeTab(this.edited - 1);\r\n        }\r\n        if (addNew) {\r\n          this.dObject.model = this.defaultModel;\r\n\r\n          this.editCurrentRecord();\r\n        }\r\n      } else {\r\n        this.errorMessage = \"Please check your entries.\";\r\n      }\r\n      if (!dontUpdateParent) {\r\n        this.updateParentArray(model);\r\n      }\r\n    },\r\n    updateParentArray(m) {\r\n      if (this.parentModel) {\r\n        if (Array.isArray(this.parentModel[this.k])) {\r\n          this.parentModel[this.k].forEach(r => {\r\n            if (r._id == m._id) {\r\n              r = m;\r\n            }\r\n          });\r\n        }\r\n        this.disableParentEdit(false, true);\r\n      }\r\n    },\r\n    getPos(e) {\r\n      console.log(e);\r\n    },\r\n    invertColor(c) {\r\n      return fun.invertColor(c);\r\n    },\r\n    getModel(item, edit) {\r\n      if (\r\n        !item &&\r\n        this.table.filterItems &&\r\n        this.table.filterItems[this.table.currentFilter]\r\n      ) {\r\n        item = this.table.filterItems[this.table.currentFilter].value;\r\n      }\r\n\r\n      var that = this;\r\n      if (!edit) {\r\n        try {\r\n          this.form = this.$refs[\"form\"].$refs[\"form\"].$refs[\"form\"];\r\n          this.form.reset();\r\n        } catch (error) {\r\n          //\r\n        }\r\n      }\r\n\r\n      if (!edit && this.defaultModel) {\r\n        this.dObject.model = this.defaultModel;\r\n      }\r\n      if (!edit && this.groupBy && this.groupByValue) {\r\n        this.dObject.model[this.groupBy] = this.groupByValue;\r\n      }\r\n      if (this.dObject.model && this.defaultModel) {\r\n        // console.log(this.dObject.model);\r\n        Object.keys(this.defaultModel).forEach(k => {\r\n          if (!this.dObject.model[k]) {\r\n            this.dObject.model[k] = this.defaultModel[k];\r\n          }\r\n        });\r\n      }\r\n      if (that.schema.properties) {\r\n        Object.keys(that.schema.properties).forEach(k => {\r\n          if (that.schema.properties[k].loadOnDemand) {\r\n            var data_object = that.schema.properties[k][\"v-bind\"];\r\n            if (!data_object || !data_object.object_name) {\r\n              data_object = {\r\n                object_name: that.data_object.schema_name,\r\n                qryFn: \"var q={}; q['_id']=par._id; q\"\r\n              };\r\n            }\r\n            if (data_object.qryFn && item) {\r\n              var par = item;\r\n              data_object.qry = eval(data_object.qryFn);\r\n            }\r\n            axios\r\n              .post(this.serverURL + \"/get_data\", data_object, {\r\n                withCredentials: true\r\n              })\r\n              .then(response => {\r\n                var data = response.data;\r\n                if (data_object.data_property && data.model[0]) {\r\n                  data.model = data.model[0][data_object.data_property];\r\n                }\r\n                var parTable = that.table;\r\n\r\n                if (\r\n                  that.schema.properties[k] &&\r\n                  that.schema.properties[k][\"x-display\"] == \"d-table\"\r\n                ) {\r\n                  data_object.editData = data.model;\r\n\r\n                  this.$root.$emit(\"onDemandLoaded\", {\r\n                    tbl: this,\r\n                    data: data_object.editData\r\n                  });\r\n                  that.dObject.update = {};\r\n                  that.dObject.update[k] = {\r\n                    id_fields: that.schema.properties[k][\"v-bind\"].id_fields\r\n                  };\r\n                  data_object.parTable = parTable;\r\n                  this.$root.$on(\"updateChanged\", tbl => {\r\n                    // console.log(tbl);\r\n                    if (tbl.tableName == data_object.tableName) {\r\n                      that.dObject.update[k].update_data = tbl.update;\r\n                      that.table.update = that.dObject.update;\r\n                    }\r\n                  });\r\n                } else {\r\n                  try {\r\n                    that.dObject.model[k] = data.model[0][k];\r\n                  } catch (error) {\r\n                    //\r\n                  }\r\n                }\r\n\r\n                this.formKey = !this.formKey;\r\n              });\r\n          }\r\n        });\r\n      }\r\n\r\n      this.formKey = !this.formKey;\r\n    },\r\n    customSorting(items, index, isDesc) {\r\n      var that = this;\r\n      if (!items || !items.length) {\r\n        return items;\r\n      }\r\n\r\n      var defaultSort = function() {\r\n        if (!items || !items.length) {\r\n          return true;\r\n        }\r\n        var templatedItems = fun.clone(items);\r\n        templatedItems.forEach(t => {\r\n          Object.keys(t).forEach(k => {\r\n            t[k] =\r\n              that.getTemplate(t, {\r\n                name: k\r\n              }) || t[k];\r\n          });\r\n        });\r\n        if (that.sortBy && !index.length) {\r\n          index = [that.sortBy];\r\n        }\r\n        // || that.sortDesc\r\n        var desc = false;\r\n        if (isDesc.length) {\r\n          desc = isDesc[0];\r\n        } else {\r\n          desc = that.sortDesc;\r\n        }\r\n\r\n        fun.sortObjects(templatedItems, index, desc);\r\n        templatedItems.forEach(r => {\r\n          var origItem = items.find(i => {\r\n            return i._id == r._id;\r\n          });\r\n          Object.keys(origItem).forEach(k => {\r\n            r[k] = origItem[k];\r\n          });\r\n        });\r\n        let sortedOriginalItems = templatedItems.map(item =>\r\n          items.find(origItem => origItem._id === item._id)\r\n        );\r\n        return sortedOriginalItems;\r\n      };\r\n      if (this.customSort && this.customSortItems.length) {\r\n        if (!index.length || this.customSortItems.includes(index[0])) {\r\n          if (!index.length) {\r\n            index = [this.customSortItems[0]];\r\n          }\r\n        } else {\r\n          return defaultSort();\r\n        }\r\n\r\n        return this.sortDisabled\r\n          ? defaultSort()\r\n          : this.customSort(items, index, isDesc);\r\n      } else {\r\n        return defaultSort();\r\n      }\r\n    },\r\n    getColor(props, field) {\r\n      var cls = \"\";\r\n      var value = props.item[field.name];\r\n\r\n      if (this.coloredFields && this.coloredFields.indexOf(field.name) != -1) {\r\n        var colorCls;\r\n        if (this.getItemColor) {\r\n          colorCls = this.getItemColor(value, field.name, true, this.tableName);\r\n        } else {\r\n          if (props[\"color\"]) {\r\n            colorCls = props[\"color\"];\r\n            //\r\n          }\r\n        }\r\n\r\n        cls = colorCls;\r\n        if (this.editable.indexOf(field.name) != -1) {\r\n          return cls;\r\n        } else {\r\n          return cls + \" editable\";\r\n        }\r\n      } else {\r\n        return \"underscore\";\r\n      }\r\n    },\r\n    getInvertColor(props, field) {\r\n      return fun.invertColor(this.getColor(props, field));\r\n    },\r\n    itemClass(item) {\r\n      if (this.rowClassFn) {\r\n        return this.rowClassFn(item);\r\n      }\r\n      if (this.getRowClass) {\r\n        let color = this.getRowClass(item);\r\n\r\n        return this.addDynamicClass(color);\r\n      } else {\r\n        return \"\";\r\n      }\r\n    },\r\n    addDynamicClass(color) {\r\n      if (!color) {\r\n        return \"\";\r\n      }\r\n      let className = `row-color-${color.replace(\"#\", \"\")}`;\r\n      if (!document.getElementById(className)) {\r\n        const style = document.createElement(\"style\");\r\n        const readableColor = fun.calculateLuminance(color);\r\n        style.id = className;\r\n        style.type = \"text/css\";\r\n        style.innerHTML = `\r\n      .${className} {\r\n        background-color: ${color} !important;\r\n        color: ${readableColor} !important; /* Apply readable text color */\r\n      }\r\n      .${className} .v-icon,\r\n      .${className} i,\r\n      .${className} .v-data-table__expanded {\r\n       background-color: ${color} !important;\r\n        color: ${readableColor} !important; /* Ensure icons and slot content match text color */\r\n      }\r\n    `;\r\n        document.head.appendChild(style);\r\n      }\r\n      return className;\r\n    },\r\n    changeSort(column) {\r\n      if (this.pagination.sortBy === column) {\r\n        this.pagination.descending = !this.pagination.descending;\r\n      } else {\r\n        this.pagination.sortBy = column;\r\n        this.pagination.descending = false;\r\n      }\r\n    },\r\n    onPagination(paginationProperties) {\r\n      // paginationProperties.itemsPerPage = parseInt(this.itemsPerPageEdited);\r\n\r\n      if (this.itemsPerPageChanged) {\r\n        this.itemsPerPageChanged = false;\r\n        return;\r\n      }\r\n      if (this.doServerPagination) {\r\n        if (\r\n          // !this.serverPaginationDone &&\r\n          paginationProperties.page > 1 ||\r\n          (this.currentPage > 1 && paginationProperties.navigate)\r\n        ) {\r\n          this.currentPage = paginationProperties.page;\r\n          //\r\n          this.loadFromDb();\r\n          // this.serverPaginationDone = false;\r\n        }\r\n      } else {\r\n        this.pageCount = paginationProperties.pageCount;\r\n        this.currentPage = paginationProperties.page;\r\n        this.itemsLength = paginationProperties.itemsLength;\r\n        this.pageStart = paginationProperties.pageStart + 1;\r\n        this.pageStop = paginationProperties.pageStop;\r\n        this.perPage = paginationProperties.itemsPerPage;\r\n      }\r\n    },\r\n\r\n    saveOrder(event) {\r\n      const movedItem = this.table.splice(event.oldIndex, 1)[0];\r\n      this.table.splice(event.newIndex, 0, movedItem);\r\n      if (this.onRowDragDrop) {\r\n        this.onRowDragDrop(this.table, event);\r\n      }\r\n    },\r\n    getParentVBind() {\r\n      return this.schema[\"v-bind\"];\r\n    },\r\n    getParentSchema() {\r\n      let properties = this.schema.properties\r\n        ? this.schema.properties\r\n        : this.data_object.schema.properties;\r\n      return properties;\r\n    },\r\n    getSchema(field, model) {\r\n      var that = this;\r\n      var properties = this.schema.properties\r\n        ? this.schema.properties\r\n        : this.data_object.schema.properties;\r\n\r\n      if (properties) {\r\n        var schema = fun.clone(properties); //JSON.parse(JSON.stringify(properties));\r\n        Object.keys(schema).forEach(function(k) {\r\n          if (k != field.name) {\r\n            delete schema[k];\r\n          }\r\n        });\r\n        schema[field.name] = this.prepareEditedField(schema[field.name]);\r\n        // schema[field.name].hideTitle = true;\r\n        if (field[\"v-bind\"] && schema[field.name]) {\r\n          schema[field.name][\"v-bind\"] = field[\"v-bind\"];\r\n        }\r\n        if (\r\n          schema[field.name] &&\r\n          !schema[field.name][\"x-display\"] &&\r\n          (!schema[field.name].type || schema[field.name].type == \"string\")\r\n        ) {\r\n          schema[field.name][\"x-display\"] = \"v-text-field\";\r\n          schema[field.name][\"v-bind\"] = schema[field.name][\"v-bind\"] || {};\r\n          schema[field.name][\"v-bind\"].clearable = true;\r\n        }\r\n\r\n        return schema;\r\n      }\r\n    },\r\n    getCurrentEditedItem(t) {\r\n      var item = this.originalRecords.filter(d => {\r\n        return d._id == t.id;\r\n      })[0];\r\n      this.editCurrentRecord(item);\r\n    },\r\n    getDialogType(field) {\r\n      // Determine whether to use 'v-edit-dialog' or 'v-dialog' based on item properties\r\n      return field[\"v-bind\"] && field[\"v-bind\"].dialog\r\n        ? \"v-dialog\"\r\n        : \"v-edit-dialog\";\r\n    },\r\n    openDialog(field) {\r\n      this.currentItem = field;\r\n      if (this.getDialogType(field) === \"v-dialog\") {\r\n        this.dialogModel = true;\r\n      }\r\n      // Else, the v-edit-dialog will handle its own opening\r\n    },\r\n    getVBind(field, model) {\r\n      var vBind = this.getSchema(field, model);\r\n      vBind.readonly = this.getReadOnly(field, model);\r\n    },\r\n    getReadOnly(field, model) {\r\n      var that = this;\r\n      if (\r\n        that.schema[field][\"v-bind\"] &&\r\n        that.schema[field][\"v-bind\"].readOnlyFormula\r\n      ) {\r\n        var readOnlyFormula = that.schema[field][\"v-bind\"].readOnlyFormula;\r\n        var r = model;\r\n\r\n        return eval(readOnlyFormula);\r\n      }\r\n    },\r\n    inEditedItems() {\r\n      var that = this;\r\n      var included = false;\r\n      if (this.editable) {\r\n        this.editable.forEach(function(i) {\r\n          if (that.editedItem) {\r\n            if (i.name == that.editedItem.item) {\r\n              included = true;\r\n              return true;\r\n            }\r\n          }\r\n        });\r\n      }\r\n\r\n      return included;\r\n    },\r\n\r\n    selectMe(item, e) {\r\n      item.select(item, e);\r\n    },\r\n    clearSearch() {\r\n      this.search = \"\";\r\n      this.computedHeaders.forEach(h => {\r\n        this.searchModel[h.value] = \"\";\r\n      });\r\n      this.searchMenuModel = 0;\r\n      this.searchModelKey = !this.searchModelKey;\r\n    },\r\n    capitalize(text) {\r\n      return fun.capitalize(text);\r\n    },\r\n    formatDate(d) {\r\n      return fun.formatDate(d);\r\n    },\r\n    resetModel() {\r\n      this.model = {};\r\n    },\r\n    getGroupName(p) {\r\n      var name = p.group;\r\n      var defaultName = name || \"(none)\";\r\n      var grName = p.groupBy && p.groupBy.length ? p.groupBy[0] : \"\";\r\n      if (this.groupName) {\r\n        // this.prevGroup = this.groupName(name);\r\n        return this.groupName(name);\r\n      } else {\r\n        if (\r\n          grName &&\r\n          this.schema.properties[grName] &&\r\n          this.schema.properties[grName].template\r\n        ) {\r\n          var m = p.items[0];\r\n          var par = this.parentObject;\r\n          var addModel = this.additionalModel;\r\n          try {\r\n            var t = eval(this.schema.properties[grName].template);\r\n          } catch (error) {\r\n            t = defaultName;\r\n          }\r\n          // this.prevGroup = t;\r\n          return t;\r\n        } else {\r\n          // this.prevGroup = grName ? p.items[0][grName] : defaultName;\r\n\r\n          return grName ? p.items[0][grName] : defaultName;\r\n        }\r\n      }\r\n    },\r\n    getAddButton() {\r\n      if (this.addMenuButton) {\r\n        if (this.addMenuButton.fromItem) {\r\n          try {\r\n            return this.data_object.schema.properties[\r\n              this.addMenuButton.fromItem\r\n            ][\"v-bind\"];\r\n          } catch (error) {\r\n            //\r\n          }\r\n        }\r\n      }\r\n    },\r\n    getEditableFields() {\r\n      if (this.addMenuButton.editableFields) {\r\n        var editableFields = [];\r\n        this.addMenuButton.editableFields.forEach(f => {\r\n          var fld = {};\r\n          fld.name = f;\r\n          fld.prop = this.data_object.schema.properties[f];\r\n          editableFields.push(fld);\r\n        });\r\n        return editableFields;\r\n      }\r\n    },\r\n    cancelEdit() {\r\n      this.errorMessage = \"\";\r\n      if (this.edited) {\r\n        this.removeTab(this.edited - 1);\r\n        // this.edited = null;\r\n      }\r\n    },\r\n    getChipValue(item, slot) {\r\n      if (!this.schema.properties[slot]) {\r\n        return \"\";\r\n      }\r\n      var vBind = this.schema.properties[slot][\"v-bind\"];\r\n      var value = item[slot];\r\n\r\n      if (vBind && vBind.itemText && typeof item[slot] == \"object\") {\r\n        value = item[slot][vBind.itemText];\r\n      }\r\n      if (vBind && vBind.capitalizeText) {\r\n        value = this.capitalize(value);\r\n      }\r\n      if (this.schema.properties[slot].template) {\r\n        value = this.getTemplate(item, {\r\n          name: slot\r\n        });\r\n      }\r\n      return value;\r\n    },\r\n    save(r, isEdtited, isEditedItem, keepOpen) {\r\n      var that = this;\r\n      var ind = -1;\r\n      if (!r._id) {\r\n        r._id = fun.guid();\r\n      }\r\n      this.originalRecords.forEach((f, i) => {\r\n        if (f._id == r._id) {\r\n          ind = i;\r\n        }\r\n      });\r\n      if (ind == -1) {\r\n        this.originalRecords.push(r);\r\n        this.isNew = true;\r\n      } else {\r\n        this.originalRecords[ind] = r;\r\n      }\r\n\r\n      try {\r\n        if (this.$refs.form && !this.$refs.form.validate()) {\r\n          return;\r\n        }\r\n      } catch (error) {\r\n        //\r\n      }\r\n\r\n      if (isEdtited && !this.isEditedNew) {\r\n        this.isNew = false;\r\n      }\r\n\r\n      if (isEditedItem) {\r\n        var defaultItem = null;\r\n\r\n        if (!this.isNew) {\r\n          defaultItem = this.table[this.table.indexOf(r)];\r\n        }\r\n        if (this.editedItem && this.editedItem.modelFn) {\r\n          var par = fun.getParentByProperty(this, this.editedItem.modelFn);\r\n          if (par) {\r\n            r = par[this.editedItem.modelFn]({\r\n              r: r,\r\n              tbl: that,\r\n              defaultItem: defaultItem,\r\n              isNew: !this.isNew,\r\n              schema: this.data_object.schema,\r\n              formModel: this.formModel\r\n            });\r\n          }\r\n        }\r\n      }\r\n\r\n      if (this.isNew && Object.keys(r).length) {\r\n        if (\r\n          (!r._id || this.data_object.alwaysAddId) &&\r\n          (this.data_object.parent_object ||\r\n            this.formModel ||\r\n            this.data_object.alwaysAddId)\r\n        ) {\r\n          r._id = fun.guid();\r\n        }\r\n        var exist = this.table.filter(function(n) {\r\n          return n._id == r._id;\r\n        });\r\n        if (!exist.length) {\r\n          this.table.push(r);\r\n          // if (this.parentObject && this.k) {\r\n          //   this.parentObject[this.k] = this.table;\r\n          // }\r\n        }\r\n\r\n        this.model = {};\r\n      } else {\r\n        this.dialog = keepOpen;\r\n      }\r\n      try {\r\n        this.getCalculatedFields(r);\r\n      } catch (error) {\r\n        //\r\n      }\r\n\r\n      this.$emit(\"input\", this.originalRecords);\r\n      if (this.beforeSave) {\r\n        this.beforeSave(r, this);\r\n      }\r\n      if (\r\n        (this.getFreshData && !this.alwaysUpdate) ||\r\n        (!this.data_object.parent_object && !this.noSave) ||\r\n        this.dList ||\r\n        (this.data_object.parent_object && !this.alwaysUpdate)\r\n      ) {\r\n        if (!isEditedItem || this.alwaysUpdate) {\r\n          this.saveRecord(r, this.isNew);\r\n        }\r\n      }\r\n      if (this.alwaysUpdate && this.data_object.parent_object) {\r\n        this.submit();\r\n      } else if (!this.alwaysUpdate) {\r\n        if (Array.isArray(this.table)) {\r\n          this.$emit(\r\n            \"input\",\r\n            this.table.filter(function(r) {\r\n              return r._id;\r\n            })\r\n          );\r\n          this.$root.$emit(\"tableUpdated\", this, this.noSave);\r\n        }\r\n      }\r\n\r\n      if (!this.editedItem) {\r\n        this.isNew = true;\r\n      }\r\n\r\n      that.$root.$emit(\"record_updated\", {\r\n        data_object: that.data_object,\r\n        model: fun.clone(r)\r\n      });\r\n      this.model = {};\r\n      this.listKey = !this.listKey;\r\n      this.dialog = false;\r\n      this.setTotals();\r\n      // if (this.editedItem) {\r\n      //   this.moveFocus(r);\r\n      // }\r\n      if (this.isNew && !keepOpen) {\r\n        this.rowAdded = true;\r\n        var editedIndex = this.hideAllTabFilter ? 0 : -1;\r\n        this.editedTabs.forEach((e, i) => {\r\n          if (e.icon == \"mdi-new-box\") {\r\n            editedIndex = i;\r\n          }\r\n          if (editedIndex > -1) {\r\n            this.editedTabs.splice(editedIndex, 1);\r\n            // this.resetForm();\r\n            // this.tableMount();\r\n            // this.refresh();\r\n          }\r\n        });\r\n      }\r\n    },\r\n    resetForm() {\r\n      if (this.form) {\r\n        this.form.reset();\r\n        this.form.resetValidation();\r\n        this.successMessage = false;\r\n        this.errorMessage = false;\r\n      }\r\n    },\r\n    saveFilter() {\r\n      console.log(this.searchModel);\r\n      this.errorMessage = \"\";\r\n      if (!this.filterName) {\r\n        this.errorMessage = \"Please Enter Filter Name\";\r\n        return;\r\n      }\r\n      var filterName = this.filterName.replaceAll(\" \", \"_\");\r\n      var customFilterData = {};\r\n      customFilterData[filterName] = this.searchModel;\r\n      var data = {\r\n        object_name: \"employee\",\r\n        qry: {\r\n          \"contact.email\": this.$root.user_email\r\n        },\r\n        new_data: {\r\n          $set: {\r\n            custom_filter: customFilterData\r\n          }\r\n        }\r\n      };\r\n\r\n      axios\r\n        .post(this.serverURL + \"/update_record\", data, {\r\n          withCredentials: true\r\n        })\r\n        .then(response => {\r\n          this.successMessage = \"successfully added custom filter\";\r\n          // if(!this.additionalTabs){\r\n          //   this.additionalTabs\r\n          // }\r\n          this.updateAdditionalTabs(customFilterData);\r\n          this.clearSearch();\r\n        });\r\n    },\r\n    cancel() {\r\n      this.snack = true;\r\n      this.snackColor = \"error\";\r\n      this.snackText = \"Canceled\";\r\n      this.isNew = true;\r\n      this.model = {};\r\n    },\r\n    customBtnClick(c) {\r\n      this.$root.$emit(\"customBtnClick\", {\r\n        tbl: this,\r\n        btn: c.id\r\n      });\r\n      event.stopPropagation();\r\n    },\r\n    applyGroupBy(item) {\r\n      this.groupBy = item ? [item] : [];\r\n    },\r\n    captializedGroupByItems() {\r\n      if (this.groupByItems) {\r\n        var items = [];\r\n        // this.groupByItems = this.groupByItems.sort();\r\n        this.groupByItems.forEach(g => {\r\n          items.push({\r\n            text: fun.capitalize(g),\r\n            value: g\r\n          });\r\n        });\r\n\r\n        return items;\r\n      }\r\n    },\r\n    duplicate() {\r\n      // this.dObject.model\r\n      var dValues = [];\r\n      this.duplicateValues.split(\",\").forEach(v => {\r\n        dValues.push(v.trim());\r\n      });\r\n\r\n      var data = {\r\n        collection_name: this.data_object.object_name,\r\n        field_name: this.copyRecords.field_name,\r\n        duplicate_values: dValues,\r\n\r\n        original_value: this.dObject.model[this.copyRecords.field_name]\r\n      };\r\n\r\n      axios\r\n        .post(this.serverURL + \"/duplicate_records\", data, {\r\n          withCredentials: true\r\n        })\r\n        .then(response => {\r\n          console.log(response.data);\r\n          this.successMessage = response.data;\r\n        });\r\n    },\r\n    getCalculatedFields(model) {\r\n      if (!this.schema || !this.schema.properties) {\r\n        return;\r\n      }\r\n      var schema = this.schema.properties\r\n        ? this.schema\r\n        : this.data_object\r\n        ? this.data_object.schema\r\n        : null;\r\n      if (!schema || !schema.properties) {\r\n        return;\r\n      }\r\n      // console.log(schema);\r\n      var getNumber = function(n) {\r\n        return fun.getNumber(n);\r\n      };\r\n      var sum = function(r, formula) {\r\n        return fun.sum(r, formula);\r\n      };\r\n\r\n      var getSum = function(a) {\r\n        return fun.getSum(a);\r\n      };\r\n      var formatDate = function(a) {\r\n        return fun.formatDateTime(a);\r\n      };\r\n      var par = fun.getParentByProperty(this, this.parentProperty);\r\n      var keys = Object.keys(schema.properties);\r\n      if (!model) {\r\n        if (this.table.length) {\r\n          this.table.forEach(function(r) {\r\n            keys.forEach(function(key) {\r\n              if (schema.properties[key].calculate && r._id) {\r\n                try {\r\n                  r[key] = eval(schema.properties[key].calculate);\r\n                } catch (error) {\r\n                  r[key] = \"\";\r\n                }\r\n              }\r\n            });\r\n          });\r\n        }\r\n      } else {\r\n        keys.forEach(function(key) {\r\n          if (schema.properties[key].calculate && model._id) {\r\n            try {\r\n              model[key] = eval(schema.properties[key].calculate);\r\n            } catch (error) {\r\n              model[key] = \"\";\r\n            }\r\n          }\r\n        });\r\n      }\r\n\r\n      this.$emit(\"input\", this.originalRecords);\r\n      this.$root.$emit(\"fieldsRecalculated\", this, keys);\r\n    },\r\n    open(field, props) {\r\n      this.dialog = true;\r\n      var ref = field.name + props.item._id;\r\n\r\n      this.$nextTick(() => {\r\n        var firstElement = document.querySelector(\r\n          \".v-small-dialog__menu-content\"\r\n        );\r\n\r\n        // Check if the element exists and add the new class\r\n        if (firstElement && field[\"v-bind\"] && field[\"v-bind\"].dialog) {\r\n          firstElement.classList.add(\"edit-dialog-wrapper\");\r\n        }\r\n\r\n        // class=\r\n        const dialogEl = this.$refs[ref][0].$el;\r\n        // left = dialogEl.getBoundingClientRect().left;\r\n        if (field[\"v-bind\"] && field[\"v-bind\"].dialog) {\r\n          var parentTable = fun.findParentByTagName(dialogEl, \"table\");\r\n\r\n          left = parentTable.getBoundingClientRect().left;\r\n          document.documentElement.style.setProperty(\r\n            \"--edit-dialog-width\",\r\n            \"100%\"\r\n          );\r\n        } else {\r\n          return;\r\n        }\r\n        if (\r\n          (field[\"v-bind\"] && field[\"v-bind\"].controlAtStart) ||\r\n          this.$vuetify.breakpoint.smAndDown\r\n        ) {\r\n          const row = dialogEl.parentElement.parentElement;\r\n\r\n          var left = this.$vuetify.breakpoint.smAndDown\r\n            ? 0\r\n            : row.getBoundingClientRect().left;\r\n        }\r\n\r\n        document.documentElement.style.setProperty(\r\n          \"--edit-dialog-left\",\r\n          left + \"px\"\r\n        );\r\n      });\r\n\r\n      // document.arrive(\"input[k='\" + k + \"']\", (a) => {\r\n      //   if (a) {\r\n      //     a.click();\r\n      //   }\r\n      // });\r\n      // this.snack = true;\r\n      // this.snackColor = \"info\";\r\n      // this.snackText = \"Dialog opened\";\r\n      // this.sortDisabled = true;\r\n    },\r\n    close() {\r\n      this.dialog = false;\r\n      this.isNew = true;\r\n      this.model = {};\r\n      this.sortDisabled = false;\r\n    },\r\n\r\n    editRec(rec) {\r\n      this.isNew = false;\r\n      this.model = rec;\r\n      this.dialog = true;\r\n    },\r\n    submit(options) {\r\n      this.errorMessage = \"\";\r\n      var that = this;\r\n\r\n      var data_object = this.data_object;\r\n\r\n      var model = this.table;\r\n\r\n      if (data_object.parent_object) {\r\n        var m = {};\r\n\r\n        if (data_object.parent_object.path) {\r\n          m[data_object.parent_object.path] = model;\r\n        } else {\r\n          m[data_object.object_name] = model;\r\n        }\r\n        model = m;\r\n      }\r\n      var tot = this.getTotal ? this.getTotal(this) : \"\";\r\n\r\n      if (tot) {\r\n        model[tot.key] = tot.value;\r\n      }\r\n      if (data_object.defaultValue) {\r\n        model.forEach(function(r, i) {\r\n          model[i] = {\r\n            ...r,\r\n            ...data_object.defaultValue\r\n          };\r\n        });\r\n      }\r\n      this.getCalculatedFields();\r\n      if (this.beforeSubmit) {\r\n        var doNotSubmit = this.beforeSubmit(model, data_object.deleted);\r\n        if (doNotSubmit) {\r\n          return false;\r\n        }\r\n      }\r\n      if (this.beforeAddData) {\r\n        this.beforeAddData(model, this);\r\n      }\r\n      var metadata = this.data_object;\r\n      metadata.d_excel = this.dExcel;\r\n\r\n      var data = {\r\n        metadata: metadata,\r\n        model: model\r\n      };\r\n      if (!model._id && metadata.model && metadata.model._id) {\r\n        model._id = metadata.model._id;\r\n      }\r\n\r\n      axios\r\n        .post(this.serverURL + \"/add_data\", data, {\r\n          withCredentials: true\r\n        })\r\n        .then(function(response) {\r\n          if (response.data.msg) {\r\n            that.successMessage = \"successfully saved\"; // response.data.msg;\r\n          }\r\n\r\n          // console.log(\"error2:\", response);\r\n        })\r\n        .catch(function(error) {\r\n          that.errorMessage = error.data;\r\n          // console.log(\"error:\", error);\r\n        })\r\n        .finally(() => {\r\n          this.loading = false;\r\n        });\r\n      if (that.afterSubmit) {\r\n        var opt = {};\r\n        opt.formOptions = options;\r\n        that.afterSubmit(opt);\r\n      }\r\n    },\r\n    getEditedItem() {\r\n      var that = this;\r\n      if (this.editedItem && this.editedItem.objName) {\r\n        if (!this.editedItem.items) {\r\n          this.loading = true;\r\n          axios\r\n            .post(\r\n              this.serverURL + \"/get_records\",\r\n              {\r\n                object_name: this.editedItem.objName,\r\n                qry: this.editedItem.qry\r\n              },\r\n              {\r\n                withCredentials: true\r\n              }\r\n            )\r\n            .then(response => {\r\n              var data = response.data;\r\n              if (that.editedItem.prepareData) {\r\n                data = that.editedItem.prepareData(data);\r\n              }\r\n              that.editedItem.items = data;\r\n            })\r\n            .finally(() => {\r\n              this.loading = false;\r\n            });\r\n        }\r\n      }\r\n    },\r\n    defaultFilteredItem() {\r\n      //not used\r\n      var defaultItem = {};\r\n      if (this.filterItems && this.filterItems.length) {\r\n        var item = this.filterItems[this.currentFilter];\r\n        if (item) {\r\n          defaultItem[item.name] = item.id;\r\n          var prop = this.schema.properties[item.name];\r\n          if (prop[\"x-display\"] && prop[\"x-display\"] == \"v-combo\") {\r\n            if (prop[\"v-bind\"].returnObject) {\r\n              defaultItem[item.name] = {\r\n                text: item.caption,\r\n                value: item.id\r\n              };\r\n            }\r\n          }\r\n        }\r\n      }\r\n      return defaultItem;\r\n    },\r\n    addRowFromButton(rec, edit) {\r\n      var item = rec.item.rec || rec.item;\r\n      var specialFunction = null;\r\n      var addProp = this.data_object.schema.properties[\r\n        this.addMenuButton.fromItem\r\n      ][\"v-bind\"];\r\n      var val = rec.item.value || rec.item;\r\n      // this.$refs.dTable[\"disable-pagination\"] = true;\r\n      // this.editDisablePagination = true;\r\n      if (addProp.updateItem) {\r\n        // if (addProp.updateItem.checkCustomFunction) {\r\n        //   specialFunction = fun.getObjectsByKey(item, \"special_function\");\r\n        //   //   if (specialFunction && specialFunction.length) {\r\n        //   //     //comboUpdated\r\n\r\n        //   // }\r\n        if (item && addProp.updateItem.update) {\r\n          var f = {};\r\n          const guid = fun.guid;\r\n          f = eval(addProp.updateItem.update);\r\n          if (!f[this.addMenuButton.fromItem]) {\r\n            f[this.addMenuButton.fromItem] = val;\r\n          }\r\n          // if (this.defaultModel) {\r\n          //   Object.keys(f).forEach((k) => {\r\n          //     if (!f[k]) {\r\n          //       f[k] = this.defaultModel[k];\r\n          //     }\r\n          //   });\r\n          // }\r\n          this.defaultModel = {\r\n            ...this.defaultModel,\r\n            ...f\r\n          };\r\n        } else {\r\n          this.defaultModel[this.addMenuButton.fromItem] = val;\r\n        }\r\n        // }\r\n        // this.data_object.schema.properties[this.addMenuButton.fromItem][\"v-bind\"];\r\n        var newRow = this.addRow(rec);\r\n        if (edit) {\r\n          this.editCurrentRecord(newRow);\r\n        }\r\n        this.getCalculatedFields();\r\n        if (addProp.updateItem.checkCustomFunction) {\r\n          this.$root.$emit(\"comboUpdated\", {\r\n            obj: this,\r\n            objName: rec.objName,\r\n            model: rec,\r\n            formModel: newRow\r\n          });\r\n          return;\r\n        }\r\n      }\r\n    },\r\n    scrollToEdited(newRow) {\r\n      var that = this;\r\n      if (that.scrollOnNew) {\r\n        that.$nextTick(() => {\r\n          var ref = that.scrollOnNew + newRow._id;\r\n          if (ref) {\r\n            try {\r\n              const el = that.$refs[that.scrollOnNew][0].$el;\r\n              if (el) {\r\n                var elem =\r\n                  el.closest(\"tr\").previousElementSibling || el.closest(\"tr\");\r\n                elem.scrollIntoView({\r\n                  behavior: \"smooth\",\r\n                  block: \"start\"\r\n                  // inline: \"start\",\r\n                });\r\n              }\r\n            } catch (error) {\r\n              //\r\n            }\r\n            //\r\n          }\r\n        });\r\n      }\r\n    },\r\n    addRow(rec) {\r\n      this.errorMessage = \"\";\r\n      this.editMode = false;\r\n      this.insertMode = true;\r\n      // this.navigate(\"last\");\r\n\r\n      // var valid = true;\r\n      var newRow = {};\r\n      var that = this;\r\n      that.newRowId = \"\";\r\n      var addRow = function(valid) {\r\n        if (!valid) {\r\n          return;\r\n        }\r\n        // that.navigate(\"last\");\r\n        if (that.$refs.removeGroup) {\r\n          that.$refs.removeGroup.$el.click();\r\n        }\r\n\r\n        // this.defaultFilteredItem() ||\r\n        if (that.defaultModel) {\r\n          newRow = fun.clone(that.defaultModel);\r\n        } else {\r\n          newRow = that.getDefaults(newRow);\r\n        }\r\n        if (that.filteredTabItems.length) {\r\n          // var f = !that.hideAllTabFilter\r\n          //   ? that.currentFilter - 1\r\n          //   : that.currentFilter;\r\n          var f = that.currentFilter;\r\n          var curFilter = that.filteredTabItems[f];\r\n          if (curFilter) {\r\n            newRow[curFilter.name] = curFilter.value;\r\n          }\r\n        }\r\n        newRow._id = fun.guid();\r\n        that.newRowId = newRow._id;\r\n        that.page = that.pageCount;\r\n        if (\r\n          (that.originalRecords.length + 1) / that.itemsPerPageEdited ||\r\n          10 > that.page\r\n        ) {\r\n          // that.page += 1;\r\n          that.navigate(\"next\");\r\n        }\r\n        if (!that.table.length) {\r\n          that.table.push(newRow);\r\n        } else {\r\n          that.table.unshift(newRow);\r\n          // that.tableKey = !that.tableKey;\r\n\r\n          that.originalRecords.unshift(newRow);\r\n        }\r\n\r\n        if (that.updateNestedArray) {\r\n          that.update.add.push(newRow);\r\n        }\r\n\r\n        that.$root.$emit(\"rowAdded\", {\r\n          tbl: that,\r\n          row: newRow,\r\n          rec: rec\r\n        });\r\n        that.scrollToEdited(newRow);\r\n        return newRow;\r\n      };\r\n      if (that.newRowId) {\r\n        var valid = that.validateEntry(that.newRowId, true, valid => {\r\n          addRow(valid);\r\n        });\r\n      } else {\r\n        addRow(true);\r\n      }\r\n\r\n      this.tableKey = !this.tableKey;\r\n      return newRow;\r\n      // this.insertMode = false;\r\n    },\r\n    blankRow(rowChanged) {\r\n      var that = this;\r\n      if (!this.table.length) {\r\n        this.table = [];\r\n      }\r\n      this.newRow = {};\r\n      var addRow = function() {\r\n        var newRow = {};\r\n        if (that.defaultModel) {\r\n          newRow = fun.clone(that.defaultModel);\r\n        }\r\n        if (that.filteredTabItems.length) {\r\n          var curFilter = that.filteredTabItems[that.currentFilter];\r\n          newRow[curFilter.name] = curFilter.value;\r\n        }\r\n        if (that.editedItem && that.editedItem.defaultFn) {\r\n          that.defaultItem = that.editedItem.defaultFn(that);\r\n        }\r\n\r\n        that.table.push(newRow);\r\n        that.originalRecords.push(newRow);\r\n        that.insertedRow = newRow;\r\n        that.editDialog = true;\r\n      };\r\n      if (this.groupBy.length && this.table.length > 0) {\r\n        this.newRow[this.groupBy] = this.table[this.table.length - 1][\r\n          this.groupBy\r\n        ];\r\n      }\r\n      var blankRow = this.table.filter(r => {\r\n        return !r._id;\r\n      });\r\n\r\n      if (!blankRow.length || rowChanged) {\r\n        this.newRowInserted = true;\r\n\r\n        this.insertedRow = this.table[this.table.length - 1];\r\n        if (rowChanged) {\r\n          this.insertedRow._id = fun.guid();\r\n          addRow();\r\n        } else {\r\n          addRow();\r\n        }\r\n      }\r\n    },\r\n    resetFocus() {\r\n      var that = this;\r\n      var currentInput = document.activeElement;\r\n\r\n      if (currentInput) {\r\n        var td = currentInput.closest(\"td\");\r\n        if (td) {\r\n          var tr = td.closest(\"tr\");\r\n          var tdArray = Array.from(tr.querySelectorAll(\"td\"));\r\n          var indexCol = tdArray.findIndex(column => column == td);\r\n          var h = that.computedHeaders[indexCol - 2];\r\n\r\n          var indexRow = this.$refs[h.value].length - 1;\r\n          try {\r\n            var input = this.$refs[h.value][indexRow].$el.querySelectorAll(\r\n              \"input\"\r\n            )[0];\r\n            input.focus();\r\n          } catch (error) {\r\n            console.log(error);\r\n          }\r\n        }\r\n      }\r\n    },\r\n    blankItem(isNew, clear) {\r\n      if (this.editedItem) {\r\n        var that = this;\r\n        var edit = this.$refs.edit_combo;\r\n        var newItem = {};\r\n\r\n        if (this.editedItem.defaultFn) {\r\n          this.defaultItem = this.editedItem.defaultFn(this);\r\n        }\r\n        if (this.editedItem.modelFn) {\r\n          newItem = this.editedItem.modelFn({\r\n            r: null,\r\n            tbl: that,\r\n            defaultItem: this.defaultItem || {},\r\n            isNew: false,\r\n            schema: this.data_object.schema,\r\n            formModel: this.formModel\r\n          });\r\n        }\r\n        if (!this.table.length) {\r\n          this.table = [];\r\n        }\r\n        if (\r\n          Array.isArray(this.table) &&\r\n          !this.table.filter(function(r) {\r\n            return r && !r._id;\r\n          }).length\r\n        ) {\r\n          if (edit) {\r\n            edit.resetModel();\r\n          }\r\n\r\n          // this.moveFocus();\r\n        }\r\n      }\r\n    },\r\n    navigate(dir) {\r\n      if (dir == \"next\") {\r\n        this.page += 1;\r\n      }\r\n      if (dir == \"prev\") {\r\n        this.page -= 1;\r\n      }\r\n      if (dir == \"last\") {\r\n        this.page = this.pageCount;\r\n      }\r\n      if (dir == \"first\") {\r\n        this.page = 1;\r\n      }\r\n      if (this.doServerPagination) {\r\n        var paginationProperties = {\r\n          pageCount: this.pageCount,\r\n          page: this.page,\r\n          itemsLength: this.itemsCount,\r\n          pageStart: this.pageStop + 1,\r\n          pageStop: this.pageStop + this.perPage,\r\n          itemsPerPage: this.perPage,\r\n          navigate: true\r\n        };\r\n        this.onPagination(paginationProperties);\r\n      }\r\n    },\r\n    changeFilterTab(ev) {\r\n      // console.log(ev);\r\n      if (!ev) {\r\n        this.table = this.originalRecords;\r\n        // this.$refs.dTable[\"disable-pagination\"] = false;\r\n        // this.$refs.dTable[\"items-per-page\"] = 20;\r\n      } else {\r\n        // this.$refs.dTable[\"disable-pagination\"] = this.editDisablePagination;\r\n        // this.$refs.dTable[\"items-per-page\"] = this.itemsPerPageEdited;\r\n        this.filterItems.forEach((el, i) => {\r\n          if (el.value == ev) {\r\n            this.currentFilter = i;\r\n          }\r\n        });\r\n      }\r\n    },\r\n    onScroll(e) {\r\n      // debounce if scrolling fast\r\n      this.timeout && clearTimeout(this.timeout);\r\n\r\n      this.timeout = setTimeout(() => {\r\n        const { scrollTop } = e.target;\r\n        const rows = Math.ceil(scrollTop / this.rowHeight);\r\n\r\n        this.start =\r\n          rows + this.perPage > this.desserts.length\r\n            ? this.desserts.length - this.perPage\r\n            : rows;\r\n\r\n        this.$nextTick(() => {\r\n          e.target.scrollTop = scrollTop;\r\n        });\r\n      }, 20);\r\n    },\r\n    toggleGroup(openGroup) {\r\n      var that = this;\r\n      Object.keys(this.$refs).forEach(k => {\r\n        if (k.startsWith(\"openGroup\")) {\r\n          var groupName = k.split(\"_\")[1];\r\n          if (groupName != openGroup) {\r\n            if (that.$refs[k]) {\r\n              that.$refs[k].$el.click();\r\n            }\r\n          }\r\n        }\r\n        if (that.$refs[\"closeGroup_\" + openGroup]) {\r\n          that.$refs[\"closeGroup_\" + openGroup].$el.click();\r\n        }\r\n      });\r\n    },\r\n    moveFocus(r) {\r\n      var that = this;\r\n      try {\r\n        var observer = new MutationObserver(function(mutations) {\r\n          var rowCount = that.countVisibleRows();\r\n          var nextCtl = document.querySelectorAll(\r\n            'input[k=\"' + that.editedItem.nextCtl + '\"]'\r\n          );\r\n\r\n          if (nextCtl.length && nextCtl.length == rowCount) {\r\n            var rowIndex = nextCtl.length - 1;\r\n\r\n            if (that.isNew) {\r\n              observer.disconnect();\r\n              var clearBtn = that.$refs.edit_combo.$el.getElementsByTagName(\r\n                \"button\"\r\n              );\r\n              that.toggleGroup(r[that.groupBy]);\r\n              if (clearBtn.length) {\r\n                clearBtn[0].click();\r\n              }\r\n            }\r\n          }\r\n        });\r\n\r\n        observer.observe(document.body, {\r\n          characterDataOldValue: true,\r\n          subtree: true,\r\n          childList: true,\r\n          characterData: true\r\n        });\r\n      } catch (error) {\r\n        //\r\n      }\r\n    },\r\n    saveRecord(model, isNew) {\r\n      this.errorMessage = \"\";\r\n      Object.keys(this.schema.properties).forEach(k => {\r\n        if (\r\n          this.schema.properties[k].loadOnDemand &&\r\n          !this.schema.properties[k].keepOnSave\r\n        ) {\r\n          delete model[k];\r\n        }\r\n      });\r\n      var newModel = fun.clone(model);\r\n      var that = this;\r\n\r\n      var m = {};\r\n      m._id = undefined;\r\n\r\n      var _id = isNew ? undefined : model._id;\r\n      var alwaysUpdate = false;\r\n\r\n      var data_object = this.data_object;\r\n\r\n      if (data_object.parent_object) {\r\n        if (that.parentModel) {\r\n          alwaysUpdate = data_object.parent_object.alwaysUpdate;\r\n          _id = that.parentModel._id;\r\n        } else {\r\n          if (that.formModel) {\r\n            _id = that.formModel._id;\r\n            m._id = data_object.parent_object._id;\r\n          }\r\n        }\r\n        if (isNew) {\r\n          model._id = fun.guid();\r\n        }\r\n\r\n        var childrenPath = data_object.parent_object.children_path;\r\n\r\n        var path_ids = [];\r\n        var path = \"\";\r\n        childrenPath.forEach((p, i) => {\r\n          if (i > 0) {\r\n            path_ids.push({\r\n              name: childrenPath[i - 1],\r\n              _id: that.formModel._id\r\n            });\r\n\r\n            path += \".$.\" + p;\r\n          } else {\r\n            path = p;\r\n          }\r\n        });\r\n        data_object.parent_object.path_ids = path_ids;\r\n        data_object.parent_object.path = path;\r\n      }\r\n\r\n      if (this.beforeAddData) {\r\n        var doNotSubmit = this.beforeAddData(model, this);\r\n        if (doNotSubmit) {\r\n          return false;\r\n        }\r\n      }\r\n      // if (that.schema[\"v-bind\"].getObject) {\r\n      //   var r = model;\r\n      //   this.data_object.object_name = eval(that.schema[\"v-bind\"].getObject);\r\n      // }\r\n      var data = {\r\n        metadata: this.data_object,\r\n        update: that.update,\r\n        model: model,\r\n        _id: _id\r\n      };\r\n\r\n      // this.dialog = false;\r\n      if (isNew) {\r\n        data.metadata.add_record_to_table = true;\r\n      }\r\n\r\n      if (\r\n        (this.alwaysUpdate || alwaysUpdate) &&\r\n        (Object.keys(data.model).length || data.model.length)\r\n      ) {\r\n        alwaysUpdate = this.alwaysUpdate;\r\n        // this.loading = true;\r\n        axios\r\n          .post(this.serverURL + \"/add_data\", data, {\r\n            withCredentials: true\r\n          })\r\n          .then(function(response) {\r\n            that.loading = false;\r\n            that.successMessage = response.data.msg;\r\n            if (data.metadata.add_record_to_table && !alwaysUpdate) {\r\n              data.metadata.add_record_to_table = false;\r\n              that.loadFromDb();\r\n            }\r\n            that.$root.$emit(\"record_updated\", {\r\n              data_object: that.data_object,\r\n              model: newModel\r\n            });\r\n            if (that.afterSave) {\r\n              that.afterSave(that, newModel);\r\n            }\r\n            if (that.refreshAfterSubmit) {\r\n              // setTimeout(that.refresh(), 200);\r\n              // that.tableMount();\r\n              // that.getData();\r\n              that.refreshTable();\r\n              //\r\n            }\r\n          });\r\n      } else {\r\n        this.table.push(model);\r\n        this.originalRecords.push(model);\r\n        this.page = this.pageCount;\r\n\r\n        this.$root.$emit(\"tableUpdated\", model, !alwaysUpdate);\r\n      }\r\n    },\r\n    convertArray(jsArray) {\r\n      let convertedArray = jsArray.map(([field, order]) => {\r\n        return `(\"${field}\", ${order})`;\r\n      });\r\n      return convertedArray;\r\n    },\r\n    loadFromDb() {\r\n      // if (!this.data_object) {\r\n      //   return;\r\n      // }\r\n      var that = this;\r\n      if (!this.qry) {\r\n        // edited records\r\n\r\n        if (\r\n          this.remoteSearch ||\r\n          // (\r\n          this.doServerPagination\r\n          // && (this.search || this.sortCriteria.length\r\n\r\n          // ))\r\n        ) {\r\n          if (!this.search) {\r\n            // this.tableReady = false;\r\n            this.data_object.qry = fun.clone(this.initialQry);\r\n\r\n            if (!this.data_object.object_name) {\r\n              this.data_object.object_name = this.object_name;\r\n            }\r\n            // return;\r\n          } else {\r\n            this.data_object.qry = this.buildSearchQuery();\r\n            this.data_object.object_name =\r\n              this.data_object.remote_search_object ||\r\n              this.data_object.object_name ||\r\n              this.object_name;\r\n            this.data_object.aggregate = null;\r\n          }\r\n        }\r\n        if (\r\n          this.data_object &&\r\n          this.data_object.schema &&\r\n          !this.data_object.object_name\r\n        ) {\r\n          var d = this.data_object.schema[\"v-bind\"];\r\n          Object.keys(d).forEach(k => {\r\n            this.data_object[k] = d[k];\r\n          });\r\n\r\n          // this.data_object.object_name = this.data_object.schema[\r\n          //   \"v-bind\"\r\n          // ].object_name;\r\n          // this.data_object.schema_name = this.data_object.schema[\r\n          //   \"v-bind\"\r\n          // ].schema_name;\r\n          // this.data_object.qry = this.data_object.schema[\"v-bind\"].qry;\r\n          // this.data_object.qryFn = this.data_object.schema[\"v-bind\"].qryFn;\r\n          // this.data_object.data_property = this.data_object.schema[\r\n          //   \"v-bind\"\r\n          // ].data_property;\r\n          // this.data_object.defaultValue = this.data_object.schema[\r\n          //   \"v-bind\"\r\n          // ].defaultValue;\r\n        }\r\n        if (this.tabQry) {\r\n          if (this.data_object.qry.$and) {\r\n            this.data_object.qry.$and.push(this.tabQry);\r\n          } else {\r\n            this.data_object.qry = this.tabQry;\r\n          }\r\n        }\r\n        if (this.assistantQry) {\r\n          try {\r\n            this.assistantQry = fun.preprocessJsonForMongoDB(this.assistantQry);\r\n\r\n            if (this.data_object.qry) {\r\n              if (!this.data_object.qry.$and) {\r\n                this.data_object.qry.$and = [this.data_object.qry];\r\n              }\r\n              if (this.assistantQry.$and) {\r\n                this.assistantQry.$and.forEach(q => {\r\n                  this.data_object.qry.$and.push(q);\r\n                });\r\n              } else {\r\n                Object.keys(this.assistantQry).forEach(k => {\r\n                  var and = {};\r\n                  and[k] = this.assistantQry[k];\r\n                  this.data_object.qry.$and.push(and);\r\n                });\r\n              }\r\n            } else {\r\n              this.data_object.qry = this.assistantQry;\r\n            }\r\n          } catch (error) {\r\n            //\r\n          }\r\n        }\r\n        if (\r\n          this.data_object &&\r\n          this.data_object.qry &&\r\n          this.data_object.defaultValue\r\n        ) {\r\n          this.data_object.qry = {\r\n            ...this.data_object.qry,\r\n            ...this.data_object.defaultValue\r\n          };\r\n        }\r\n        if (this.data_object && this.data_object.qryFn) {\r\n          var par = this.parentObject;\r\n          this.data_object.qry = eval(this.data_object.qryFn);\r\n        }\r\n\r\n        if (this.doServerPagination) {\r\n          this.data_object.pagination = {\r\n            pageCount: this.pageCount,\r\n            currentPage: this.currentPage,\r\n            pageStart:\r\n              this.currentPage * this.itemsPerPageEdited -\r\n              this.itemsPerPageEdited,\r\n\r\n            itemsPerPageEdited: this.itemsPerPageEdited,\r\n            totalRecords: this.itemsCount\r\n          };\r\n          if (\r\n            this.itemsCount &&\r\n            this.data_object.pagination.pageStart >= this.itemsCount\r\n          ) {\r\n            return;\r\n          }\r\n          this.data_object.pagination.pageStop =\r\n            parseInt(this.data_object.pagination.pageStart) +\r\n            parseInt(this.itemsPerPageEdited);\r\n\r\n          // this.data_object.sort = this.convertArray(this.sortCriteria);\r\n          this.data_object.sort = this.sortCriteria;\r\n        }\r\n        if (this.data_object) {\r\n          this.data_object.per_page = this.itemsPerPage;\r\n        }\r\n\r\n        if (this.data_object && this.defaultModel) {\r\n          this.data_object.default_model = this.defaultModel;\r\n        }\r\n        if (this.maxRecords || this.serverPagination) {\r\n          this.data_object.max_records = this.maxRecords;\r\n          this.data_object.sort = this.currentSortBy[0] || this.sortBy;\r\n          this.data_object.sort_desc = this.currentSortBy[0]\r\n            ? this.currentSortDesc[0]\r\n            : this.sortDesc;\r\n        }\r\n      } else {\r\n        this.data_object.qry = this.qry;\r\n      }\r\n      this.loading = true;\r\n      var t = new Date();\r\n      if (!this.data_object.additional_data) {\r\n        this.data_object.additional_data = [];\r\n      }\r\n      if (this.tableName) {\r\n        this.data_object.additional_data.push({\r\n          obj_name: \"columns\",\r\n          qry: {\r\n            table_name: this.tableName.toLowerCase(),\r\n            user_id: this.$root.user_id\r\n          }\r\n        });\r\n        this.data_object.additional_data.push({\r\n          obj_name: \"custom_qry\",\r\n          qry: {\r\n            table_name: this.tableName.toLowerCase(),\r\n            user_id: this.$root.user_id\r\n          }\r\n        });\r\n      }\r\n      // if (this.doServerPagination && !this.itemsCount) {\r\n      //   var dObject = {\r\n      //     ...this.data_object,\r\n      //     ...{ count_only: true }\r\n      //   };\r\n      //   axios\r\n      //     .post(this.serverURL + \"/get_data\", dObject, {\r\n      //       withCredentials: true\r\n      //     })\r\n      //     .then(response => {\r\n      //       if (typeof response.data === \"object\" && response.data !== null) {\r\n      //         this.itemsCount = response.data.total_records;\r\n      //       } else {\r\n      //         this.itemsCount = response.data;\r\n      //       }\r\n\r\n      //       this.pageStop = this.itemsPerPage;\r\n      //       this.doServerPagination = true;\r\n      //       this.pagerKey = !this.pagerKey;\r\n      //     });\r\n      // }\r\n\r\n      axios\r\n        .post(this.serverURL + \"/get_data\", this.data_object, {\r\n          withCredentials: true\r\n        })\r\n        .then(response => {\r\n          // console.log(this.data_object, response.data);\r\n          var data = response.data;\r\n          this.serverPaginationDone = true;\r\n          // data.table = data.model;\r\n          // console.log(fun.roughSizeOfObject(data));\r\n          this.additionalModel = data.additional_model;\r\n          if (\r\n            this.additionalModel &&\r\n            this.additionalModel.employee &&\r\n            this.additionalModel.employee.length &&\r\n            this.additionalModel.employee[0].custom_filter\r\n          ) {\r\n            this.additionalTabs = this.additionalModel.employee[0].custom_filter;\r\n          }\r\n          if (data.schema[\"v-bind\"]) {\r\n            Object.keys(data.schema[\"v-bind\"]).forEach(k => {\r\n              that[k] = data.schema[\"v-bind\"][k];\r\n            });\r\n          }\r\n          if (data.total_records) {\r\n            this.itemsCount = data.total_records || data.model.length;\r\n            if (this.itemsCount > data.model.length) {\r\n              this.doServerPagination = true;\r\n            }\r\n          }\r\n\r\n          if (\r\n            (!data.table || !data.table.length) &&\r\n            data.model &&\r\n            data.model.length\r\n          ) {\r\n            data.table = data.model;\r\n          }\r\n          if (that.data_object.data_property) {\r\n            data.table = response.data.model[0][that.data_object.data_property];\r\n            if (!data.table.length) {\r\n              data.table = data.model;\r\n            }\r\n            if (!data.table.length) {\r\n              data.table = [];\r\n            }\r\n            that.originalRecords = fun.clone(data.table);\r\n          }\r\n          if (that.data_object.addField) {\r\n            var template =\r\n              data.schema.properties[that.data_object.addField].template;\r\n            that.schema = data.schema;\r\n            // if (!data.table.length && data.model.length) {\r\n            //   data.table = data.model;\r\n            // }\r\n            if (data.table.length) {\r\n              data.table.forEach(r => {\r\n                var d = that.getTemplate(r, {\r\n                  name: that.data_object.addField\r\n                });\r\n                r[that.data_object.addField] = d;\r\n              });\r\n            }\r\n            that.table = data.table;\r\n            if (that.formModel) {\r\n              that.formModel[that.data_object.addField] = that.table;\r\n            }\r\n\r\n            that.originalRecords = fun.clone(data.table);\r\n          }\r\n          if (that.onDataReceived) {\r\n            data = that.onDataReceived(response.data, this);\r\n            that.originalRecords = fun.clone(data.table);\r\n          }\r\n\r\n          that.addTableKey = !that.addTableKey;\r\n          if (that.defaultModel && data.table) {\r\n            data.table.forEach(r => {\r\n              Object.keys(that.defaultModel).forEach(k => {\r\n                if (!r[k]) {\r\n                  r[k] = that.defaultModel[k];\r\n                }\r\n              });\r\n            });\r\n          }\r\n          var currentPage = fun.clone(this.page);\r\n          // if (currentPage != that.pageCount) {\r\n          that.initTable(data);\r\n          // that.updateFilter();\r\n          that.getGroupBy();\r\n          that.expandAll();\r\n          if (this.editedId) {\r\n            this.editCurrentRecord(data.table[0]);\r\n          }\r\n\r\n          // }\r\n        })\r\n        .catch(r => {\r\n          // console.log(r);\r\n          // this.$root.logout();\r\n        })\r\n        .finally(() => {\r\n          that.loading = false;\r\n        });\r\n    },\r\n\r\n    getObjects(obj, key, val) {\r\n      return fun.getObjects(obj, key, val);\r\n    },\r\n    assignId() {\r\n      var that = this;\r\n      if (this.table.length) {\r\n        this.table.forEach((r, i) => {\r\n          if (!r._id) {\r\n            if (\r\n              (that.tableInsertable && i != that.table.length - 1) ||\r\n              !that.tableInsertable\r\n            )\r\n              // r._id = fun.guid();\r\n              that.table[i]._id = fun.guid();\r\n          }\r\n        });\r\n      }\r\n    },\r\n    deleteCustomFilter(item) {\r\n      this.$root.$confirm\r\n        .open(\"Delete Custom Filter\", \"Confirm deleting \" + item.value + \"?\", {\r\n          color: \"red\"\r\n        })\r\n        .then(confirm => {\r\n          if (confirm) {\r\n            var filterName = \"custom_filter.\" + item.value;\r\n            var unset = {};\r\n            unset[filterName] = \"\";\r\n\r\n            var data = {\r\n              object_name: \"employee\",\r\n              qry: {\r\n                \"contact.email\": this.$root.user_email\r\n              },\r\n              new_data: {\r\n                $unset: unset\r\n              }\r\n            };\r\n\r\n            axios\r\n              .post(this.serverURL + \"/update_record\", data, {\r\n                withCredentials: true\r\n              })\r\n              .then(response => {\r\n                this.successMessage = \"successfully removed \" + item.value;\r\n                delete this.additionalTabs[item.value];\r\n                this.filterItems = this.filterItems.filter(\r\n                  obj => obj.value !== item.value\r\n                );\r\n                this.updateAdditionalTabs();\r\n\r\n                console.log(this.filteredTabItems);\r\n                // this.tabKey = !this.tabKey;\r\n              });\r\n          }\r\n        });\r\n\r\n      //\r\n    },\r\n    getGroupBy() {\r\n      if (this.groupByItems && !this.noGroups) {\r\n        this.groupByItems = this.groupByItems.sort();\r\n        this.groupByItemsReady = true;\r\n      }\r\n    },\r\n    buildSortCriteria() {\r\n      this.sortCriteria = this.currentSortBy.map((sortField, index) => {\r\n        return [sortField, this.currentSortBy[index] ? -1 : 1];\r\n      });\r\n\r\n      console.log(\"Sort Criteria:\", this.sortCriteria);\r\n      if (this.doServerPagination) {\r\n        this.loadFromDb();\r\n      }\r\n    },\r\n    getSortBy(newSortBy) {\r\n      if (newSortBy.length) {\r\n        this.currentSortBy = newSortBy;\r\n        this.buildSortCriteria();\r\n      }\r\n    },\r\n    getSortDesc(newSortDesc) {\r\n      this.currentSortDesc = newSortDesc;\r\n      this.buildSortCriteria();\r\n    },\r\n    closeDialog(d) {\r\n      this.$refs[d][0].cancel();\r\n    },\r\n    getField(props, field) {\r\n      if (!this.schema.properties) {\r\n        return;\r\n      }\r\n      if (!field.name) {\r\n        field = {\r\n          name: field\r\n        };\r\n      }\r\n      var val = this.getTemplate(props.item, field);\r\n      if (val) {\r\n        return val;\r\n      }\r\n      if (\r\n        this.schema.properties[field.name] &&\r\n        this.schema.properties[field.name][\"x-display\"] == \"v-switch\"\r\n      ) {\r\n        return props.item[field.name]\r\n          ? \"<span style='color:green'><b>(Yes)</b></span>\"\r\n          : \"<span style='color:red'><b>(No)</b></span>\";\r\n      }\r\n\r\n      var title = field.title || this.capitalize(field.name);\r\n      if (field[\"v-bind\"]) {\r\n        if (\r\n          field[\"v-bind\"].itemText &&\r\n          field[\"v-bind\"].returnObject &&\r\n          props.item[field.name]\r\n        ) {\r\n          val = props.item[field.name][field[\"v-bind\"].itemText];\r\n          if (field[\"v-bind\"].capitalizeText) {\r\n            return this.capitalize(val);\r\n          } else {\r\n            return val;\r\n          }\r\n        } else {\r\n          val = props.item[field.name];\r\n          if (field[\"v-bind\"].capitalizeText) {\r\n            return this.capitalize(props.item[field.name]);\r\n          } else {\r\n            return props.item[field.name];\r\n          }\r\n        }\r\n      } else {\r\n        if (\r\n          field[\"v-bind\"] &&\r\n          field[\"v-bind\"].itemText &&\r\n          field[\"v-bind\"].returnObject\r\n        ) {\r\n          val = props.item[field.name][field[\"v-bind\"].itemText];\r\n          if (val) {\r\n            return val;\r\n          } else {\r\n            val = this.getFieldDisplay(field, title);\r\n            return val;\r\n          }\r\n        } else {\r\n          if (\r\n            this.schema.properties[field.name] &&\r\n            this.schema.properties[field.name].displayProperty &&\r\n            props.item[field.name]\r\n          ) {\r\n            val =\r\n              props.item[field.name][\r\n                this.schema.properties[field.name].displayProperty\r\n              ];\r\n\r\n            if (!val) {\r\n              val = this.getFieldDisplay(field, title);\r\n            }\r\n            return val;\r\n          } else {\r\n            val = props.item[field.name];\r\n\r\n            if (!val || (typeof val == \"object\" && !val.length)) {\r\n              val = this.getFieldDisplay(field, title);\r\n            }\r\n\r\n            return val;\r\n          }\r\n        }\r\n      }\r\n    },\r\n    getFieldDisplay(field, title) {\r\n      var val = \"\";\r\n      if (!this.schema.properties[field.name]) {\r\n        return;\r\n      }\r\n      if (this.schema.properties[field.name][\"x-type\"] == \"number\") {\r\n        val = 0;\r\n      } else if (this.schema.properties[field.name][\"x-display\"] == \"v-cc\") {\r\n        val = \"\";\r\n      } else {\r\n        val = \"(No \" + title + \")\";\r\n      }\r\n      return val;\r\n    },\r\n    sortedDraggedObjects(item) {\r\n      let sortedObjects = (this.droppedObjects || [])\r\n        .filter(f => {\r\n          return (\r\n            f[this.droppedObjectFilterProperty] &&\r\n            f[this.droppedObjectFilterProperty]._id == item._id\r\n          );\r\n        })\r\n        .sort((a, b) => {\r\n          const aValue = eval(`a.${this.droppedObjectsSortProperty}`) || 0;\r\n          const bValue = eval(`b.${this.droppedObjectsSortProperty}`) || 0;\r\n          return aValue - bValue;\r\n        });\r\n      if (!sortedObjects.length) sortedObjects = [{}];\r\n      return sortedObjects;\r\n    },\r\n    getDefaultDataObject() {\r\n      if (!this.originalRecords.length && this.defaultDataObject) {\r\n        axios\r\n          .post(this.serverURL + \"/get_data\", this.defaultDataObject, {\r\n            withCredentials: true\r\n          })\r\n          .then(response => {\r\n            var data = response.data;\r\n            this.originalRecords = data.model;\r\n            this.table = this.originalRecords;\r\n          })\r\n          .catch(r => {\r\n            console.log(r);\r\n          });\r\n      }\r\n    },\r\n    getData() {\r\n      var that = this;\r\n\r\n      if (this.editData && this.editData.length) {\r\n        this.table = this.editData;\r\n        this.itemsCount = this.editData.length;\r\n\r\n        if (!this.alwaysUpdate) {\r\n          this.getFreshData = false;\r\n        }\r\n      } else if (\r\n        this.vModel &&\r\n        Array.isArray(this.vModel)\r\n        //  &&\r\n        // this.vModel.length\r\n      ) {\r\n        this.originalRecords = this.vModel;\r\n        this.table = this.originalRecords;\r\n        if (\r\n          !this.table.length &&\r\n          !this.getFreshData &&\r\n          this.data_object.schema.default_values\r\n        ) {\r\n          this.originalRecords = this.data_object.schema.default_values;\r\n          this.table = this.originalRecords;\r\n          this.getDefaultDataObject();\r\n        }\r\n      } else if (this.data_object && this.data_object.model) {\r\n        this.table = this.data_object.model;\r\n        if (!Array.isArray(this.data_object.model)) {\r\n          this.table = [];\r\n        }\r\n      }\r\n      if (this.table.length) {\r\n        if (!this.itemsCount) {\r\n          this.itemsCount = this.table.length;\r\n        }\r\n        this.table.forEach(r => {\r\n          if (r && !r._id) {\r\n            r._id = fun.guid();\r\n          }\r\n        });\r\n      }\r\n      if (this.beforeGetData) {\r\n        this.beforeGetData(this.data_object);\r\n      }\r\n\r\n      if (this.getFreshData) {\r\n        this.loadFromDb();\r\n      } else {\r\n        this.getTableProperties(this.data_object);\r\n        if (this.singleSelect && !this.selected.length) {\r\n          this.selected.push(this.table[0]);\r\n        }\r\n        this.doTabs(this.currentFilter);\r\n        this.getGroupBy();\r\n        this.getDefaultDataObject();\r\n        this.getUploadFields();\r\n\r\n        this.addTableKey = !this.addTableKey;\r\n      }\r\n      this.getCalculatedFields();\r\n      if (this.initialData && this.groupBy) {\r\n        var groupBy = that.groupBy;\r\n        this.initialData.forEach((d, i) => {\r\n          var groupExist = that.table.filter(c => {\r\n            return d[groupBy] == c[groupBy] && !c._id;\r\n          });\r\n          if (!groupExist.length && !this.editedItem) {\r\n            var r = {};\r\n            r[groupBy] = d[groupBy];\r\n            that.table.push(r);\r\n          }\r\n        });\r\n      }\r\n\r\n      this.formObject.schema = this.schema;\r\n      this.formObject.model = this.model;\r\n      if (this.formModel) {\r\n        this.formModel[this.k] = this.table;\r\n        // this.formModel[this.k] = this.table;\r\n      }\r\n      if (this.data_object && this.data_object.schema) {\r\n        this.expandedObjects = fun.getObjects(\r\n          this.data_object.schema.properties,\r\n          \"in_expand\",\r\n          true\r\n        );\r\n      }\r\n      if (this.schema[\"v-bind\"] && this.schema[\"v-bind\"].sort) {\r\n        var sort = this.schema[\"v-bind\"].sort;\r\n        this.sortTable(sort);\r\n      }\r\n      if (!this.originalRecords.length) {\r\n        this.originalRecords = fun.clone(this.table);\r\n      }\r\n    },\r\n    hideCtl(c) {\r\n      // console.log(c);\r\n      if (c.hideIf) {\r\n        var p = this.formModel;\r\n        return eval(c.hideIf);\r\n      }\r\n      return false;\r\n    },\r\n    resetNewRow() {\r\n      this.errorMessage = \"\";\r\n      this.table.splice(0, 1);\r\n    },\r\n    selectCtl(e) {\r\n      console.log(e);\r\n    },\r\n    sortTable(sort) {\r\n      this.table.sort((a, b) => {\r\n        return a[sort] - b[sort];\r\n      });\r\n    },\r\n    getFilterParams(obj) {\r\n      if (obj.filterTabs) {\r\n        this.filterItems = obj.filterTabs;\r\n      }\r\n    },\r\n    autoAssign() {\r\n      var wasAssigned = false;\r\n      this.table.forEach((r, i) => {\r\n        Object.keys(this.schema.properties).forEach(k => {\r\n          if (this.schema.properties[k].autoAssign && !r[k]) {\r\n            r[k] = i + 1;\r\n            if (this.schema.properties[k].prefix) {\r\n              var prefix = eval(this.schema.properties[k].prefix);\r\n              r[k] = prefix + \"-\" + r[k];\r\n            }\r\n\r\n            wasAssigned = true;\r\n          }\r\n        });\r\n      });\r\n      if (wasAssigned) {\r\n        this.submit();\r\n      }\r\n    },\r\n    isNewGroup(prop) {\r\n      // console.log(prop);\r\n      var displayGroup = false;\r\n      if (typeof prop[\"group\"] == \"string\") {\r\n        if (!this.prevGroup || this.prevGroup != prop[\"group\"]) {\r\n          displayGroup = true;\r\n        }\r\n      }\r\n      if (typeof prop[\"group\"] == \"object\") {\r\n        if (!this.prevGroup || this.prevGroup._id != prop[\"group\"]._id) {\r\n          displayGroup = true;\r\n        }\r\n      }\r\n      // this.prevGroup = prop[\"group\"];\r\n      return displayGroup;\r\n    },\r\n    getUploadFields() {\r\n      this.uploadFields = [];\r\n      Object.keys(this.schema.properties).forEach(p => {\r\n        if (this.schema.properties[p].upload) {\r\n          if (!this.schema.properties[p].upload_fields) {\r\n            this.uploadFields.push(p);\r\n          } else {\r\n            this.schema.properties[p].upload_fields.forEach(u => {\r\n              this.uploadFields.push(u);\r\n            });\r\n          }\r\n        }\r\n      });\r\n      if (this.uploadFields.length) {\r\n        this.hasUpload = true;\r\n        this.toolbarKey = !this.toolbarKey;\r\n        this.uploadFieldsTitle =\r\n          this.uploadFieldsInitialTitle + \" \" + this.uploadFields.join(\", \");\r\n      }\r\n    },\r\n    initTable(data) {\r\n      this.initEdited();\r\n      var that = this;\r\n      if (!this.schema) {\r\n        return;\r\n      }\r\n\r\n      if (\r\n        !this.table ||\r\n        !this.table.length ||\r\n        (data && data.model && data.model.length)\r\n      ) {\r\n        if (data.model && data.model.length) {\r\n          this.table = data.model;\r\n        } else if (data.table && data.table.length) {\r\n          this.table = data.table;\r\n        } else {\r\n          this.table = [];\r\n        }\r\n      }\r\n      if (data.total_records && this.itemsPerPageEdited) {\r\n        this.pageCount = Math.ceil(\r\n          data.total_records / this.itemsPerPageEdited\r\n        );\r\n        this.itemsLength = data.total_records;\r\n        this.pageStart = 1 + this.itemsPerPageEdited * (this.currentPage - 1);\r\n        this.pageStop = this.pageStart + this.itemsPerPageEdited - 1;\r\n        if (this.pageStop > data.total_records) {\r\n          this.pageStop = data.total_records;\r\n        }\r\n        // this.currentPage += 1;\r\n      }\r\n      var table = this.table;\r\n      this.schema = data.schema;\r\n      this.getUploadFields();\r\n\r\n      if (data.table && !this.editData) {\r\n        this.table = data.table;\r\n        if (this.dList) {\r\n          this.editData = this.table;\r\n        }\r\n      } else {\r\n        this.table = table;\r\n      }\r\n\r\n      this.groupBy = data.groupBy || [];\r\n      this.headers = data.headers;\r\n\r\n      this.getDefaults();\r\n\r\n      if (this.ajustTableSchema) {\r\n        this.ajustTableSchema(this);\r\n      }\r\n\r\n      this.getAllEditable();\r\n      if (this.dExcel) {\r\n        this.excelKey = !this.excelKey;\r\n      }\r\n      try {\r\n        this.filterHeaders();\r\n      } catch (error) {\r\n        //\r\n      }\r\n\r\n      try {\r\n        this.getColumns();\r\n      } catch (error) {\r\n        //\r\n      }\r\n\r\n      this.setTotals();\r\n      // this.getCalculatedFields();\r\n      if (this.singleSelect && !this.selected.length && !this.getFreshData) {\r\n        this.selected.push(this.table[0]);\r\n      }\r\n      if (this.selectedId) {\r\n        var selRec;\r\n        this.table.forEach((r, i) => {\r\n          if (r._id == this.selectedId) {\r\n            selRec = i;\r\n          }\r\n        });\r\n        this.selected.push(this.table[selRec]);\r\n      }\r\n\r\n      if (data.schema && data.schema[\"v-bind\"]) {\r\n        var vBind = data.schema[\"v-bind\"];\r\n        Object.keys(vBind).forEach(k => {\r\n          that[k] = vBind[k];\r\n        });\r\n        this.tableEditRow = this.editRow;\r\n\r\n        if (vBind.filterTabsFn) {\r\n          this.filterTabsFn = vBind.filterTabsFn;\r\n          // if (vBind.initialHideHeaders) {\r\n          //   vBind.initialHideHeaders.forEach((h) => {\r\n          //     this.computedHeaders[h].hidden = true;\r\n          //   });\r\n          // }\r\n          this.doTabs(this.currentFilter);\r\n        }\r\n        if (\r\n          (vBind.filterTabs && !this.filteredTabItems) ||\r\n          !this.filteredTabItems.length\r\n        ) {\r\n          this.originalRecords = table;\r\n          this.getFilterParams(vBind);\r\n        } else {\r\n          this.autoAssign();\r\n        }\r\n      }\r\n\r\n      if (this.editRecord) {\r\n        this.editRecord(this);\r\n      }\r\n\r\n      if (\r\n        this.schema &&\r\n        this.schema.properties &&\r\n        this.schema.properties[\"color\"]\r\n      ) {\r\n        if (!this.model.length) {\r\n          this.getDefaultColor();\r\n        }\r\n      }\r\n      if (this.sortBy) {\r\n        fun.sortArrayOfObjectsByProperties(this.table, this.sortBy);\r\n      }\r\n      this.originalRecords = fun.clone(this.table);\r\n      this.tableReady = true;\r\n      this.propertyList = [];\r\n      Object.keys(this.schema.properties).forEach(k => {\r\n        this.propertyList.push(k);\r\n      });\r\n\r\n      this.$root.$emit(\"initTable\", this);\r\n    },\r\n    convertAssistantQry() {\r\n      if (this.assistantQry) {\r\n        return fun.mongoToSqlLike(this.assistantQry);\r\n      }\r\n    },\r\n    resetAssistantQry() {\r\n      this.assistantQry = null;\r\n      this.itemsCount = 0;\r\n      this.qryExplanation = \"\";\r\n\r\n      this.loadFromDb();\r\n    },\r\n    buildCustomQueryPrompt() {\r\n      // var prompt =\r\n      //   \"Based on the description build a mongo query for collection called 'shipments' that have fields \" +\r\n      //   this.propertyList.toString() +\r\n      //   \". Only use those properties. Find fields logically. Do not query fields that not requested in user prompt. Use lower case for strings.  Provide the response in JSON format.\";\r\n      this.qryExplanation = \"\";\r\n      this.assistantVBind.customInstructions = this.assistant_instructions;\r\n      this.assistantModel = true;\r\n\r\n      return prompt;\r\n    },\r\n    initEdited(id) {\r\n      if (this.noInitEdit) {\r\n        return;\r\n      }\r\n      if (\r\n        !id &&\r\n        this.$route.params.id &&\r\n        fun.isNumericOrObjectId(this.$route.params.id)\r\n      ) {\r\n        id = this.$route.params.id;\r\n      }\r\n      if (\r\n        !id &&\r\n        this.$route.params.qry &&\r\n        fun.isNumericOrObjectId(this.$route.params.qry)\r\n      ) {\r\n        id = this.$route.params.qry;\r\n      }\r\n      if (id == 0) {\r\n        this.editCurrentRecord();\r\n        return;\r\n      }\r\n      if (!id) {\r\n        return;\r\n      }\r\n\r\n      var idField = this.idField || \"_id\";\r\n      if (this.$route.path.includes(\"storage\")) {\r\n        idField = \"storage_id\";\r\n      }\r\n      this.editedId = id;\r\n      if (this.maxRecords) {\r\n        this.data_object.qry = { _id: this.editedId };\r\n      }\r\n      this.tableEditRow = this.editRow;\r\n      if (id && this.tableEditRow && !this.$route.path.includes(\"settings\")) {\r\n        if (\r\n          !this.$route.path.includes(\"storage\") &&\r\n          !this.$route.path.includes(\"customers\")\r\n        ) {\r\n          this.editedId = id.toString().split(\":\")[0];\r\n          // } else {\r\n        }\r\n        if (this.loadFromDb) {\r\n          this.qry = {};\r\n          this.qry[idField] = this.editedId;\r\n        }\r\n\r\n        // if (!this.maxRecords) {\r\n        //   var curRec = this.originalRecords.filter((r) => {\r\n        //     return r[idField] == this.editedId;\r\n        //   });\r\n        //   if (this.getFreshData && curRec[0]) {\r\n        //     this.editCurrentRecord(curRec[0]);\r\n        //   }\r\n        //   // } else {\r\n\r\n        //   // axios\r\n        //   //   .post(this.serverURL + \"/get_data\", this.data_object, {\r\n        //   //     withCredentials: true,\r\n        //   //   })\r\n        //   //   .then((response) => {\r\n        //   //     var data = response.data;\r\n        //   //     this.editCurrentRecord(data.model[0]);\r\n        //   //   });\r\n        //   //\r\n        // }\r\n      }\r\n    },\r\n    getDefaultColor() {\r\n      var edited = false;\r\n      this.table.forEach(t => {\r\n        if (!t[\"color\"]) {\r\n          t[\"color\"] = \"#\" + fun.randomColor();\r\n          edited = true;\r\n        }\r\n      });\r\n      if (edited) {\r\n        this.submit();\r\n      }\r\n    },\r\n    doTabs(curFilter) {\r\n      var that = this;\r\n      if (this.filterTabs) {\r\n        // this.currentFilter = 0;\r\n        this.doTabFilter();\r\n      }\r\n      if (this.filterTabsFn) {\r\n        if (typeof this.filterTabsFn == \"string\") {\r\n          var capitalize = fun.capitalize;\r\n          var addModel = this.additionalModel;\r\n          var parTable = this.parTable;\r\n          var sortObjects = fun.sortObjects;\r\n          var table = this.table;\r\n          var schema = this.schema;\r\n          var prop = schema.properties;\r\n          try {\r\n            this.currentFilter = -1;\r\n            this.filterItems = eval(this.filterTabsFn);\r\n\r\n            // this.currentFilter = curFilter || 0;\r\n            // this.doTabFilter();\r\n          } catch (error) {\r\n            console.log(error);\r\n          }\r\n        } else if (this.filterTabsFn[\"v-bind\"]) {\r\n          var filterTabVBind = this.filterTabsFn[\"v-bind\"];\r\n          var par = this.parentObject;\r\n          this.initialHideHeaders = filterTabVBind.initialHideHeaders;\r\n\r\n          if (filterTabVBind[\"v-if\"] && !eval(filterTabVBind[\"v-if\"])) {\r\n            return;\r\n          }\r\n          var d = {\r\n            object_name: filterTabVBind.objName,\r\n            all_records: true,\r\n            qry: filterTabVBind.qry\r\n          };\r\n          if (filterTabVBind.permittedQry) {\r\n            try {\r\n              this.$root.store.permittedActions.forEach(permittedActions => {\r\n                if (eval(filterTabVBind.permittedQry)) {\r\n                  var qry = eval(filterTabVBind.permittedQry).replaceAll(\r\n                    \"`\",\r\n                    '\"'\r\n                  );\r\n                  filterTabVBind.qry = JSON.parse(qry);\r\n                }\r\n              });\r\n            } catch (error) {\r\n              //\r\n            }\r\n          }\r\n\r\n          axios\r\n            .post(this.serverURL + \"/get_data\", d, {\r\n              withCredentials: true\r\n            })\r\n            .then(response => {\r\n              var data = response.data;\r\n              this.filterItems = [];\r\n              // try {\r\n              //   data.model = fun.sortObjectByKey(data.model, \"sort\");\r\n              // } catch (error) {\r\n              //   //\r\n              // }\r\n\r\n              data.model.forEach(m => {\r\n                var options = filterTabVBind.options;\r\n                if (!options) {\r\n                  try {\r\n                    options = eval(filterTabVBind.optionFn);\r\n                  } catch (error) {\r\n                    //\r\n                  }\r\n                }\r\n\r\n                this.filterItems.push({\r\n                  caption: fun.capitalize(m[filterTabVBind.caption]),\r\n                  value: m[filterTabVBind.value],\r\n                  name: filterTabVBind.name,\r\n                  color: m[filterTabVBind.color],\r\n                  filterProperty: filterTabVBind.filterProperty,\r\n                  options: options\r\n                });\r\n              });\r\n              if (filterTabVBind.addToListFrom) {\r\n                that.table.forEach(dt => {\r\n                  var exist = that.filterItems.filter(r => {\r\n                    return r.value == dt[filterTabVBind.addToListFrom];\r\n                  });\r\n                  if (!exist.length && dt[filterTabVBind.addToListFrom]) {\r\n                    that.filterItems.push({\r\n                      caption: dt[filterTabVBind.addToListFrom],\r\n                      value: dt[filterTabVBind.addToListFrom],\r\n                      // name: filterTabVBind.name,\r\n                      // color: m[filterTabVBind.color],\r\n                      filterProperty: filterTabVBind.filterProperty\r\n                    });\r\n                  }\r\n                });\r\n              }\r\n              fun.sortObjects(\r\n                this.filterItems,\r\n                filterTabVBind.sort || filterTabVBind.caption\r\n              );\r\n              // console.log(fun.roughSizeOfObject(data));\r\n              this.currentFilter = 0;\r\n              this.getFilterCombo();\r\n              this.checkTabOptions();\r\n              this.searchBarKey = !this.searchBarKey;\r\n            })\r\n            .catch(r => {\r\n              console.log(r);\r\n            });\r\n        } else {\r\n          this.filterItems = this.filterTabsFn();\r\n          this.currentFilter = 0;\r\n          this.doTabFilter();\r\n        }\r\n      }\r\n      if (this.limitTabsToData) {\r\n        this.limitTabs();\r\n      }\r\n      this.getFilterCombo();\r\n    },\r\n    limitTabs() {\r\n      var that = this;\r\n      axios\r\n        .post(\r\n          this.serverURL + \"/get_data\",\r\n          {\r\n            object_name: this.limitObject.object_name,\r\n            all_records: true\r\n          },\r\n          {\r\n            withCredentials: true\r\n          }\r\n        )\r\n        .then(response => {\r\n          var arr = response.data.model;\r\n          if (that.filterItems.length) {\r\n            var groupped = fun.groupBy(arr, this.filterItems[0].name);\r\n            var included = Object.keys(groupped);\r\n            if (this.limitObject.additional_value) {\r\n              included.push(this.limitObject.additional_value);\r\n            }\r\n\r\n            that.filterItems = that.filterItems.filter(item =>\r\n              included.includes(item.value)\r\n            );\r\n          }\r\n\r\n          // console.log(groupped);\r\n        });\r\n    },\r\n    toggleBreakpoint() {\r\n      this.menuModel = !this.menuModel;\r\n      if (!this.breakpoint || this.breakpoint == \"0\") {\r\n        this.breakpoint = 600;\r\n        document\r\n          .getElementsByClassName(\"v-data-table\")[0]\r\n          .classList.add(\"mobile-list\");\r\n        // this.mobileList = \"mobile-list\";\r\n      } else {\r\n        this.breakpoint = 0;\r\n        document\r\n          .getElementsByClassName(\"v-data-table\")[0]\r\n          .classList.remove(\"mobile-list\");\r\n        // this.mobileList = \"\";\r\n      }\r\n    },\r\n    showComponent(c, r) {\r\n      var comp = this.schema.properties[c];\r\n      // console.log(comp);\r\n      var d = this.displayIf(r, comp);\r\n\r\n      return d;\r\n    },\r\n    getSaveTitle(c) {\r\n      var comp = this.schema.properties[c];\r\n      return comp.save_title || \"Apply\";\r\n    },\r\n    getSaveFunction(c) {\r\n      var comp = this.schema.properties[c];\r\n      return comp.save_function;\r\n    },\r\n    displayIf(r, value) {\r\n      if (value[\"v-if-not-parameter\"] && r[value[\"v-if-not-parameter\"]]) {\r\n        return false;\r\n      }\r\n      // if (value[\"v-if-top-parent\"]) {\r\n      //   var topParent = value[\"v-if-top-parent\"];\r\n\r\n      //   var parent = fun.getParentByProperty(this, topParent.property);\r\n      //   var display =\r\n      //     parent.model[topParent.parameter] &&\r\n      //     parent.model[topParent.parameter].length > 0;\r\n      //   return display;\r\n      // }\r\n      var par = value[\"v-if-parameter\"]\r\n        ? value[\"v-if-parameter\"].name || value[\"v-if-parameter\"]\r\n        : \"\";\r\n      if (value[\"v-if-value\"] || value[\"v-if-parent\"]) {\r\n        return (\r\n          fun.toArrayOfString(value[\"v-if-value\"]).includes(r[par]) ||\r\n          value[\"v-if-value\"] == r[par] ||\r\n          (value[\"v-if-value\"].toString().indexOf(\"undefined\") > -1 &&\r\n            !r[par] &&\r\n            !value[\"v-if-parent\"])\r\n        );\r\n      }\r\n      if (\r\n        value[\"v-if-parameter\"] &&\r\n        !value[\"v-if-value\"] &&\r\n        !value[\"v-if-not-value\"]\r\n      ) {\r\n        var params = par.split(\",\");\r\n        var incl = false;\r\n        params.forEach(p => {\r\n          if (r[p]) {\r\n            incl = true;\r\n          }\r\n        });\r\n        return incl;\r\n      }\r\n      if (value[\"v-if-not-value\"]) {\r\n        // par = value[\"v-if-parameter\"].name || value[\"v-if-parameter\"];\r\n        return value[\"v-if-not-value\"] == \"true\"\r\n          ? false\r\n          : !fun.toArrayOfString(value[\"v-if-not-value\"]).includes(r[par]) &&\r\n              !r[value[\"v-if-not-value\"]];\r\n      }\r\n\r\n      return true;\r\n    },\r\n    updateHeight(doFullHeight) {\r\n      // const parentHeight =\r\n      //   window.innerHeight - this.$refs.parentContainer.offsetTop;\r\n      // if (this.isFullScreen || doFullHeight) {\r\n      //   this.wrapHeight = parentHeight - 200 + \"px\";\r\n      //   return;\r\n      // }\r\n      this.$nextTick(() => {\r\n        if (\r\n          // this.$refs.parentContainer &&\r\n          this.$refs.outerScroll &&\r\n          this.$refs.tableWrap\r\n        ) {\r\n          const topElementY = this.$refs.outerScroll.getBoundingClientRect()\r\n            .top;\r\n          const topElementHeight = this.$refs.outerScroll.offsetHeight;\r\n          // this.wrapHeight =\r\n          //   window.innerHeight -\r\n          //   topElementY -\r\n          //   2 * topElementHeight +\r\n          //   \"px !important\";\r\n          // this.$root.$emit(\"tableHeightUpdated\", this);\r\n\r\n          // this.$refs.tableWrap.style.height = `${newHeight}px !important`;\r\n          // this.$refs.tableWrap.style.maxHeight = `${newHeight}px !important`;\r\n        }\r\n      });\r\n    },\r\n    getFilterCombo() {\r\n      if (this.filterItems && this.filterItems.length && this.showFilterCombo) {\r\n        // a.slice().unshift(0)\r\n        // fun.prepend(this.comboFilterItems);\r\n\r\n        // if (!this.hideAllTabFilter && !this.hideAllInCombo) {\r\n        //   this.comboFilterItems.push({\r\n        //     caption: \"(All \" + fun.capitalize(this.tableName) + \")\",\r\n        //     value: \"\",\r\n        //   });\r\n        // }\r\n        fun.sortArrayOfObjectsByProperties(this.filterItems, [\"value\"]);\r\n        this.filterItems.forEach(c => {\r\n          this.comboFilterItems.push(c);\r\n        });\r\n        // this.comboFilterItems = fun.clone(this.filterItems);\r\n\r\n        // this.comboCurrentFilter = this.filterItems[0];\r\n      }\r\n    },\r\n    getTextDialogIcon(slot, item) {\r\n      if (slot.icon) {\r\n        return slot.icon;\r\n      } else if (slot.iconFn) {\r\n        var i = item;\r\n        return eval(slot.iconFn);\r\n      }\r\n    },\r\n    getDefaults(model) {\r\n      // console.log(this.schema);\r\n      var that = this;\r\n      if (!model) {\r\n        model = that.model;\r\n      }\r\n      if (this.schema && this.schema.properties) {\r\n        var properties = this.schema.properties;\r\n        var keys = Object.keys(properties);\r\n        keys.forEach(function(key) {\r\n          if (properties[key].default_value) {\r\n            if (!model[key]) {\r\n              model[key] = properties[key].default_value;\r\n              if (\r\n                properties[key].default_value.function &&\r\n                that[properties[key].default_value.function]\r\n              ) {\r\n                model[key] = that[properties[key].default_value.function]();\r\n              }\r\n            }\r\n          }\r\n        });\r\n      }\r\n\r\n      return model;\r\n\r\n      // console.log(this.model);\r\n    },\r\n    prepareEditedField(ed) {\r\n      if (ed) {\r\n        if (!ed[\"v-bind\"]) {\r\n          ed[\"v-bind\"] = {};\r\n        }\r\n        ed[\"hideTitle\"] = !ed.outlined;\r\n        ed[\"v-bind\"].class = \"mb-2 mt-0 pa-0\";\r\n\r\n        if (ed[\"x-type\"] == \"number\") {\r\n          ed[\"v-bind\"].style = \"max-width: 75px;\";\r\n        } else {\r\n          ed[\"v-bind\"].style = \"white-space:nowrap;width:100%;\";\r\n        }\r\n        return ed;\r\n      }\r\n    },\r\n    deleteCustomQry(item, index) {\r\n      var that = this;\r\n      this.$root.$confirm\r\n        .open(\"Delete\", \"Confirm deleting \" + item.caption + \"?\", {\r\n          color: \"red\"\r\n        })\r\n        .then(confirm => {\r\n          if (confirm) {\r\n            var data = {\r\n              object_name: \"custom_qry\",\r\n              ids: [item._id]\r\n            };\r\n\r\n            axios\r\n              .post(this.serverURL + \"/delete_records\", data, {\r\n                withCredentials: true\r\n              })\r\n              .then(response => {\r\n                that.additionalModel.custom_qry.splice(index, 1);\r\n                that.successMessage = response.data;\r\n              });\r\n          }\r\n        });\r\n    },\r\n    getAllEditable() {\r\n      var that = this;\r\n      if (!this.schema) {\r\n        return;\r\n      }\r\n      var schema = this.schema.properties\r\n        ? this.schema\r\n        : this.data_object.schema;\r\n      if (schema.properties) {\r\n        var keys = Object.keys(schema.properties);\r\n        keys.forEach(function(r) {\r\n          var ed = {\r\n            name: r\r\n          };\r\n\r\n          if (\r\n            // !this.$vuetify.breakpoint.smAndDown &&\r\n            (that.allEditable ||\r\n              (that.editable && that.editable.includes(r))) &&\r\n            (!schema.properties[r][\"calculate\"] ||\r\n              schema.properties[r][\"editable\"]) &&\r\n            !schema.properties[r][\"readonly\"]\r\n          ) {\r\n            ed.directEdit =\r\n              schema.properties[r][\"x-display\"] != \"textarea\"\r\n                ? (that.directEdit &&\r\n                    schema.properties[r].directEdit != false) ||\r\n                  (!that.directEdit && schema.properties[r].directEdit == true)\r\n                : false;\r\n            if (!schema.properties[r][\"x-display\"]) {\r\n              ed.ctl = \"v-text-field\";\r\n            } else {\r\n              ed.ctl = schema.properties[r][\"x-display\"];\r\n              ed[\"v-bind\"] = schema.properties[r][\"v-bind\"];\r\n            }\r\n            ed[\"x-type\"] = schema.properties[r][\"x-type\"];\r\n\r\n            if (ed.directEdit != false || that.directEdit) {\r\n              ed = that.prepareEditedField(ed);\r\n            }\r\n            // if (ed[\"v-bind\"]) {\r\n            if (\r\n              (that.editable && !ed[\"v-bind\"]) ||\r\n              !ed[\"v-bind\"].noEditInTable\r\n            ) {\r\n              that.editable.push(ed);\r\n            } else {\r\n              if (!ed[\"v-bind\"] || ed[\"v-bind\"].capitalizeText) {\r\n                that.capitalizable.push(r);\r\n              }\r\n            }\r\n\r\n            // }\r\n\r\n            // }\r\n          } else if (\r\n            (schema.properties[r][\"v-bind\"] &&\r\n              (schema.properties[r][\"v-bind\"][\"capitalizeText\"] ||\r\n                schema.properties[r][\"v-bind\"][\"returnObject\"])) ||\r\n            schema.properties[r].template\r\n          ) {\r\n            if (that.capitalizable || schema.properties[r].template) {\r\n              that.capitalizable.push(r);\r\n            }\r\n          }\r\n        });\r\n      }\r\n    },\r\n    getEditedSchema() {\r\n      var that = this;\r\n      var field = this.editable.filter(e => {\r\n        return e.name == that.editedItem.item;\r\n      })[0];\r\n      return this.getSchema(field);\r\n    },\r\n    removeTab(i) {\r\n      this.edited = 0;\r\n      this.editedTabs.splice(i, 1);\r\n      this.childEdited = false;\r\n      this.disableParentEdit(false);\r\n    },\r\n    getTableProperties(data_object) {\r\n      if (!data_object) {\r\n        return;\r\n      }\r\n      var that = this;\r\n      var headers = this.headers.length\r\n        ? this.headers\r\n        : this.data_object.headers;\r\n\r\n      var data = data_object.schema;\r\n      if (!data) {\r\n        return;\r\n      }\r\n      var get_table = data.get_table;\r\n      if (!get_table) {\r\n        get_table = \"all\";\r\n      }\r\n      var filter = get_table == \"all\" ? \"\" : get_table.split(\",\");\r\n      var properties = data.properties;\r\n      if (!properties) {\r\n        return;\r\n      }\r\n      var keys = Object.keys(properties);\r\n\r\n      try {\r\n        that.table.forEach(r => {\r\n          // console.log(r, i);\r\n          Object.keys(r).forEach(k => {\r\n            var schema = data.properties[k];\r\n\r\n            if (schema && schema[\"x-display\"] == \"v-date-field\") {\r\n              r[k] = fun.formatDate(r[k]);\r\n            }\r\n          });\r\n        });\r\n      } catch (error) {\r\n        console.log(error);\r\n      }\r\n      this.originalRecords = fun.clone(this.table);\r\n      var groupBy = \"\";\r\n      if (!headers) {\r\n        headers = [];\r\n      }\r\n      //\r\n      keys.forEach(function(key) {\r\n        if (!filter || filter.indexOf(key) == -1) {\r\n          var p = properties[key];\r\n          var header = {};\r\n          header.text = p.title;\r\n          header.value = key;\r\n          header.hidden = p.hidden;\r\n          header.splitTitle = p.splitTitle;\r\n          // header.groupable = p.groupable;\r\n\r\n          if (!fun.InArray(headers, \"value\", key)) {\r\n            headers.push(header);\r\n          }\r\n\r\n          if (p.groupBy) {\r\n            groupBy = key;\r\n          }\r\n        }\r\n      });\r\n\r\n      this.groupBy = groupBy || [];\r\n      if (!this.headers.length) {\r\n        this.headers = headers;\r\n      }\r\n      // this.initTable();\r\n\r\n      this.filterHeaders();\r\n      this.getAllEditable();\r\n      // this.getCalculatedFields();\r\n      if (!Object.keys(that.schema).length) {\r\n        that.schema = that.data_object.schema;\r\n      }\r\n      try {\r\n        if (typeof Object.keys(that.schema.properties).forEach === \"function\") {\r\n          Object.keys(that.schema.properties).forEach(p => {\r\n            that.schema.properties[p][\"full-width\"] = true;\r\n          });\r\n        }\r\n      } catch (error) {\r\n        console.log(error);\r\n      }\r\n    },\r\n\r\n    getCurrentDateTime() {\r\n      return fun.getCurrentDateTime(true);\r\n    },\r\n    getCurrentDate() {\r\n      return fun.getCurrentDateTime();\r\n    },\r\n    getCurrentUser() {\r\n      return this.$root.store.userData.email;\r\n    },\r\n    updateModel(m, isNew) {\r\n      // console.log(m);\r\n      this.save(m, !isNew, true);\r\n    },\r\n    itemExpanded(value) {\r\n      var that = this;\r\n      if (this.expandable) {\r\n        if (that.expanded.includes(value)) {\r\n          that.transitioned.splice(that.transitioned.indexOf(value), 1);\r\n          setTimeout(function() {\r\n            that.expanded.splice(that.expanded.indexOf(value), 1);\r\n          }, 100);\r\n        } else {\r\n          that.expanded.push(value);\r\n          setTimeout(function() {\r\n            that.transitioned.push(value);\r\n          }, 100);\r\n        }\r\n      }\r\n    },\r\n    handleClick(value) {\r\n      var that = this;\r\n      if (this.rowClick && !this.selected.length) {\r\n        this.rowClick(value);\r\n      }\r\n\r\n      if (this.tableInsertable) {\r\n        if (!value._id) {\r\n          this.insertNewRow = true;\r\n        } else {\r\n          this.insertNewRow = false;\r\n        }\r\n      }\r\n\r\n      //\r\n    },\r\n\r\n    setTotals() {\r\n      var tot = this.getTotal ? this.getTotal(this) : \"\";\r\n      var data = {};\r\n      if (tot) {\r\n        var model = {};\r\n        data.total = tot;\r\n        model[tot.key] = tot.value;\r\n        var data_object = this.data_object;\r\n        if (data_object.parent_object && data_object.parent_object.object_id) {\r\n          data.model = model;\r\n        }\r\n      }\r\n\r\n      this.totals = data;\r\n    },\r\n    getTemplate(m, field) {\r\n      var htmlDecode = function(input) {\r\n        var doc = new DOMParser().parseFromString(input, \"text/html\");\r\n        return doc.documentElement.textContent;\r\n      };\r\n      // if (\r\n      //   this.schema[\"v-bind\"] &&\r\n      //   (!this.schema[\"v-bind\"].addField ||\r\n      //     this.schema[\"v-bind\"].addField != field.name)\r\n      // ) {\r\n      var that = this;\r\n      var r = m;\r\n      var par = this.parentObject;\r\n      var addModel = this.additionalModel;\r\n      var curRec = m[field.name];\r\n      // var formatDate = fun.formatDate;\r\n      var capitalize = fun.capitalize;\r\n      var parTable = this.parTable;\r\n      var table = this.table;\r\n      var parentModel = this.parentModel;\r\n      var sum = function(r, formula) {\r\n        return fun.sum(r, formula);\r\n      };\r\n      var convertDateFormat = fun.convertDateFormat;\r\n      var formatDate = fun.formatDate;\r\n      var portal = this.$root.portal_id;\r\n      var retValue = \"\";\r\n      // if (\r\n      //   that.schema.properties[field.name] &&\r\n      //   that.schema.properties[field.name].template\r\n      // ) {\r\n      //   console.log(that.schema.properties[field.name].template);\r\n      // }\r\n      // if (m.crew_name == \"BEDDELEEM\") {\r\n      //   console.log(m);\r\n      // }\r\n      // if (r.shipment_id == 564595) {\r\n      //   console.log(\"shipment_id\", r.shipment_id);\r\n      // }\r\n      // if (field.name == \"order_date_time\" && r.order_date_time) {\r\n      //   console.log(r.order_date_time);\r\n      // }\r\n      try {\r\n        if (that.schema.properties[field.name].template) {\r\n          retValue = eval(that.schema.properties[field.name].template);\r\n        }\r\n      } catch (error) {\r\n        retValue = \"\";\r\n        // console.log(error);\r\n      }\r\n      try {\r\n        retValue = retValue.toString();\r\n      } catch (error) {\r\n        //\r\n      }\r\n      return retValue;\r\n      // } else {\r\n      //   return m[field.name];\r\n      // }\r\n    },\r\n    filterHeaders() {\r\n      var that = this;\r\n\r\n      if (this.headers && this.headers.length) {\r\n        if (\r\n          // this.editRow &&\r\n          !this.headers.filter(h => {\r\n            return h.value == \"actions\";\r\n          }).length\r\n\r\n          //   ||\r\n          // this.actionCommand\r\n        ) {\r\n          this.headers.push({\r\n            text: \"\",\r\n            value: \"actions\",\r\n            sortable: false,\r\n            groupable: false\r\n          });\r\n        }\r\n        // if (this.actionCommand) {\r\n        //   this.actionCommand.forEach((a) => {\r\n        //     var addCommand = true;\r\n        //     if (a.displayIf) {\r\n        //       var isMobile = this.$root.isMobile;\r\n        //       try {\r\n        //         addCommand = eval(a.displayIf);\r\n        //       } catch (error) {\r\n        //         //\r\n        //       }\r\n        //     }\r\n        //     if (addCommand && !this.headers.some((element) => element.text === a.text)) {\r\n        //       this.headers.push({\r\n        //         text: a.text,\r\n        //         value: \"actions\",\r\n        //         sortable: false,\r\n        //         groupable: false,\r\n        //       });\r\n        //     }\r\n        //   });\r\n        // }\r\n        if (\r\n          this.expandable &&\r\n          !this.headers.filter(h => {\r\n            return h.value == \"data-table-expand\";\r\n          }).length\r\n        ) {\r\n          this.headers.push({\r\n            text: \"\",\r\n            value: \"data-table-expand\",\r\n            sortable: false,\r\n            groupable: false\r\n          });\r\n        }\r\n\r\n        if (this.isGoToButton) {\r\n          this.headers.push({\r\n            text: \"GoTo\",\r\n            value: \"goto\",\r\n            sortable: false,\r\n            groupable: false\r\n          });\r\n        }\r\n        var parentModel = this.parentModel;\r\n        var formModel = this.formModel;\r\n        var par = fun.getParentByProperty(this, this.parentProperty);\r\n        var splitHeader = [];\r\n        var splitedHeader = null;\r\n        var splitIndex = -1;\r\n        that.headers.forEach((h, i) => {\r\n          if (\r\n            h.value != \"data-table-expand\" &&\r\n            h.value &&\r\n            h.value != \"actions\"\r\n          ) {\r\n            h.text = h.text || fun.capitalize(h.value);\r\n          }\r\n          var schema = that.schema.properties\r\n            ? that.schema\r\n            : that.data_object.schema;\r\n          try {\r\n            h.hidden =\r\n              (schema.properties[h.value] &&\r\n                schema.properties[h.value].hideInTable) ||\r\n              (schema.properties[h.value].hideInTableFn &&\r\n                eval(schema.properties[h.value].hideInTableFn));\r\n          } catch (error) {\r\n            // console.log(\"hide in table error\", h.value);\r\n            // h.hidden = true;\r\n            //\r\n          }\r\n\r\n          try {\r\n            h.noCustomer = schema.properties[h.value].noCustomer;\r\n          } catch (error) {\r\n            //\r\n          }\r\n          try {\r\n            if (h.text.split(\";\").length > 1) {\r\n              splitHeader = h.text.split(\";\");\r\n              splitedHeader = fun.clone(h);\r\n              splitIndex = i;\r\n            }\r\n          } catch (error) {\r\n            //\r\n          }\r\n\r\n          // if (h.filter) {\r\n          //   h.filter = eval(h.filter);\r\n          // }\r\n        });\r\n\r\n        that.computedHeaders = this.headers.filter(function(header) {\r\n          if (!that.columnTool) {\r\n            header.show = true;\r\n          }\r\n\r\n          return (\r\n            (!that.$root.customerId || !header.noCustomer) &&\r\n            (header != \"_id\",\r\n            (header.value != \"_id\" &&\r\n              header.value != \"_object_id\" &&\r\n              !header.hidden &&\r\n              (!that.fields_excluded ||\r\n                !that.fields_excluded.includes(header.value)) &&\r\n              (!that.fields_included ||\r\n                that.fields_included.includes(header.value))) ||\r\n              header.value == \"actions\" ||\r\n              header.value == \"data-table-expand\")\r\n          );\r\n        });\r\n        that.originalHeaders = fun.clone(that.computedHeaders);\r\n        that.mobileHeaders = fun.clone(that.computedHeaders);\r\n        that.checkHiddenHeaders();\r\n        try {\r\n          this.getColumns();\r\n        } catch (error) {\r\n          //\r\n        }\r\n        // this.computedHeaders.forEach((c) => {\r\n        //   c.show = true;\r\n        // });\r\n        console.log(that.computedHeaders);\r\n      } else {\r\n        return [];\r\n      }\r\n    },\r\n    countVisibleRows() {\r\n      if (this.$refs.dTable) {\r\n        var rows = this.$refs.dTable.$el\r\n          .getElementsByTagName(\"table\")[0]\r\n          .getElementsByTagName(\"tr\");\r\n        var cnt = 0;\r\n        rows.forEach(r => {\r\n          if (!r.className.includes(\"v-row-group__header\")) {\r\n            cnt += 1;\r\n          }\r\n        });\r\n        return cnt - 1;\r\n      }\r\n    },\r\n    deleteSelected() {\r\n      var that = this;\r\n      var data = {};\r\n      var ids = [];\r\n      var id = this.deleteId || \"_id\";\r\n      this.selected.forEach(function(d) {\r\n        if (d[id]) {\r\n          ids.push(d[id]);\r\n          that.update.delete.push(d[id]);\r\n        }\r\n      });\r\n\r\n      data.object_name =\r\n        this.data_object.object_name_to_update || this.data_object.object_name;\r\n      if (data.object_name && data.object_name.startsWith(\"v_\")) {\r\n        data.object_name = data.object_name.replace(\"v_\", \"\");\r\n      }\r\n      data.delete_object_name = this.data_object.delete_object_name;\r\n\r\n      data.db_name = this.data_object.db_name;\r\n      data.parent_object = this.data_object.parent_object;\r\n      data.ids = ids;\r\n      data.id_name = id;\r\n      data.additional_delete_objects = this.data_object.additional_delete_objects;\r\n\r\n      this.$root.$confirm\r\n        .open(\"Delete\", \"Confirm deleting \" + ids.length + \" record(s)?\", {\r\n          color: \"red\"\r\n        })\r\n        .then(confirm => {\r\n          if (confirm) {\r\n            that.data_object.deleted = that.selected;\r\n            that.selected.forEach(function(s) {\r\n              that.table.forEach(function(r, i) {\r\n                if (r[id] == s[id] || !r[id]) {\r\n                  that.table.splice(i, 1);\r\n                }\r\n              });\r\n              that.originalRecords.forEach(function(r, i) {\r\n                if (r[id] == s[id] || !r[id]) {\r\n                  that.originalRecords.splice(i, 1);\r\n                }\r\n              });\r\n            });\r\n            that.setTotals();\r\n            that.$root.$emit(\"tableChanged\", that);\r\n            if (\r\n              (that.getFreshData && !that.data_object.parent_object) ||\r\n              that.dList ||\r\n              that.data_object.object_name_to_update\r\n            ) {\r\n              axios\r\n                .post(this.serverURL + \"/delete_records\", data, {\r\n                  withCredentials: true\r\n                })\r\n                .then(response => {\r\n                  that.successMessage = response.data;\r\n                  that.$root.$emit(\"itemsDeleted\", that);\r\n\r\n                  that.selected = [];\r\n                  that.listKey = !that.listKey;\r\n                });\r\n            } else {\r\n              if (that.alwaysUpdate) {\r\n                that.submit({\r\n                  delete: true\r\n                });\r\n              } else {\r\n                that.$emit(\"input\", that.originalRecords);\r\n                that.$root.$emit(\"itemsDeleted\", that);\r\n\r\n                if (this.editedItem) {\r\n                  this.blankItem(true);\r\n                }\r\n                // if (this.tableInsertable) {\r\n                //   this.blankRow();\r\n                // }\r\n              }\r\n            }\r\n          }\r\n          this.selectDelete = false;\r\n        });\r\n    },\r\n    highlightClickedRow(value) {\r\n      const tr = value.target.parentNode;\r\n      tr.classList.add(\"highlight\");\r\n    },\r\n    expandDataObject(item) {\r\n      var data_object = {\r\n        model: item,\r\n        parentModel: this.parentModel,\r\n        parModel: this.model,\r\n        formModel: this.formModel,\r\n        parObject: this.parObject,\r\n        parentObject: this.parentObject,\r\n        // data_object: this.data_object,\r\n        onValueChange: this.onValueChange,\r\n        schema: this.data_object\r\n          ? this.data_object.schema\r\n          : this.getDataObjectFromParent(item),\r\n        isExpandRow: true\r\n      };\r\n      return data_object;\r\n    },\r\n    getDataObjectFromParent(item) {\r\n      var dataObject = this.expandedObjects;\r\n      console.log(this.data_object);\r\n    },\r\n    expandAll() {\r\n      if (this.expandable) {\r\n        if (!this.allTableExpanded) {\r\n          this.expanded = this.table;\r\n          this.allTableExpanded = true;\r\n        } else {\r\n          this.expanded = [];\r\n          this.allTableExpanded = false;\r\n        }\r\n\r\n        // for (let i = 0; i < this.table.length; i += 1) {\r\n        //   const item = this.table[i];\r\n        //   this.$set(this.$refs.dTable.expanded, item._id, true);\r\n        // }\r\n      }\r\n    },\r\n\r\n    getObject() {\r\n      return this;\r\n    },\r\n    expandRows() {\r\n      console.log(this.$refs);\r\n      // this.$refs.expandIcon[0].click();\r\n    },\r\n    refresh() {\r\n      // this.$forceUpdate();\r\n      this.tableMount();\r\n    },\r\n    uploadExcel() {\r\n      this.upload = !this.upload;\r\n    },\r\n\r\n    downloadExcel() {\r\n      this.errorMessage = \"\";\r\n      var that = this;\r\n      var data = {\r\n        portal_id: \"portal_\" + this.$root.portal_id,\r\n        objectName: this.data_object.object_name,\r\n        record_id: fun.guid(),\r\n        filename: this.data_object.object_name,\r\n        // html: html,\r\n        host: `${location.protocol}//${location.hostname}:${location.port}`,\r\n        // images: d.images,\r\n        excel: true,\r\n        data: this.table\r\n        // headers: this.headers,\r\n      };\r\n      this.loading = true;\r\n      try {\r\n        axios\r\n          .post(this.serverURL + \"/create_pdf\", data)\r\n          .then(response => {\r\n            // console.log(response.data);\r\n            const url = response.data;\r\n            // window.location.href = url;\r\n            this.loading = false;\r\n            this.xllink = url;\r\n            window.open(url, \"_blank\");\r\n            // window.open(url, \"_blank\");\r\n          })\r\n          .catch(function(error) {\r\n            console.log(error);\r\n            that.errorMessage = error.message;\r\n            that.loading = false;\r\n          });\r\n      } catch (error) {\r\n        console.log(error);\r\n      }\r\n    },\r\n    getForm(v, itemName) {\r\n      if (v.$refs && v.$refs[\"form\"]) {\r\n        this.currentForm = v.$refs[\"form\"];\r\n      } else {\r\n        if (v.$refs && v.$refs[itemName]) {\r\n          v.$refs[itemName].forEach(f => {\r\n            if (f.$refs[\"form\"]) {\r\n              this.currentForm = f.$refs[\"form\"];\r\n            } else {\r\n              if (f.$refs && f.$refs[itemName].length) {\r\n                f.$refs[itemName].forEach(m => {\r\n                  if (m.$refs) {\r\n                    this.getForm(m, itemName);\r\n                  }\r\n                });\r\n              }\r\n            }\r\n          });\r\n        }\r\n      }\r\n    },\r\n    emitDialogSave(item, itemName) {\r\n      var formReady = true;\r\n      var that = this;\r\n      var d = itemName + item._id;\r\n      if (itemName) {\r\n        this.getForm(this, itemName);\r\n        if (this.currentForm) {\r\n          formReady = this.currentForm.validate();\r\n        }\r\n\r\n        if (!formReady) {\r\n          return false;\r\n        }\r\n      }\r\n\r\n      this.update.update.push(item);\r\n\r\n      // if (this.filterTabs) {\r\n      //   this.model = fun.clone(this.originalRecords);\r\n      //   this.model.forEach((m) => {\r\n      //     if (m._id == item._id) {\r\n      //       m = item;\r\n      //     }\r\n      //   });\r\n      // }\r\n\r\n      this.$root.$emit(\"tableItemChanged\", {\r\n        tbl: that,\r\n        item: item,\r\n        itemName: itemName\r\n      });\r\n\r\n      this.getCalculatedFields();\r\n      var saveFunction = this.getSaveFunction(itemName);\r\n      if (!saveFunction) {\r\n        this.$refs[d][0].save();\r\n        if (this.alwaysUpdate) {\r\n          this.submit();\r\n        }\r\n        return item[itemName];\r\n      } else {\r\n        this.$root.$emit(\"saveFunction\", {\r\n          tbl: this,\r\n          item: item,\r\n          editor: this.$refs[d][0]\r\n        });\r\n        // console.log(saveFunction);\r\n      }\r\n    },\r\n    disableParentEdit(disable, update) {\r\n      if (this.k) {\r\n        var parent = fun.getParentsByProperty(this.$parent, \"childEdited\");\r\n        if (parent.length) {\r\n          parent[0].childEdited = disable;\r\n          this.parentModel = this.formModel;\r\n          if (update) {\r\n            parent[0].save(this.parentModel);\r\n          }\r\n        }\r\n      }\r\n    },\r\n    editCurrentRecord(item, addNew) {\r\n      // if (this.formModel) {\r\n      //   this.childEdited = true;\r\n      // }\r\n      if (this.addRecordWithLink) {\r\n        this.myLinkClick(this.addRecordWithLink);\r\n      }\r\n      this.editedItem = item;\r\n      this.errorMessage = \"\";\r\n      this.dialog = true;\r\n      this.$root.$emit(\"tableEditRecord\", {\r\n        tbl: this,\r\n        rec: item\r\n      });\r\n      this.disableParentEdit(true);\r\n      this.isEditedNew = !item;\r\n      this.editMode = true;\r\n\r\n      if (!item) {\r\n        this.dObject.model = fun.clone(this.defaultModel);\r\n        // this.isEditedNew = true;\r\n        // item = this.addRow();\r\n      } else {\r\n        this.dObject.model = item;\r\n      }\r\n\r\n      // if (item) {\r\n\r\n      var editExist = this.editedTabs.filter(e => {\r\n        return item && e.id == item._id;\r\n      });\r\n      // if (!addNew) {\r\n      if (!editExist || !editExist.length) {\r\n        this.initEdit(item, true);\r\n        var text = \"\";\r\n        if (this.editedItemTitle) {\r\n          this.editedItemTitle.forEach(t => {\r\n            text += fun.deepFind(item, t) + \" \";\r\n          });\r\n          if (!text || text.toString().includes(\"undefined\")) {\r\n            text = \"New \" + this.tableName;\r\n          }\r\n          //\r\n        } else if (item) {\r\n          text =\r\n            Object.keys(item)[0] != \"_id\"\r\n              ? item[Object.keys(item)[0]]\r\n              : item[Object.keys(item)[1]];\r\n        }\r\n        if (text && typeof text != \"object\") {\r\n          text = text.toString().trim();\r\n        } else {\r\n          text = \"\";\r\n        }\r\n        this.editedTabs.push({\r\n          text: text,\r\n          icon: item ? \"mdi-pencil\" : \"mdi-plus\",\r\n          id: item ? item._id : \"\",\r\n          item: item || {}\r\n        });\r\n        this.edited = this.editedTabs.length;\r\n        this.editTitle = text;\r\n      } else {\r\n        item = editExist[0].item;\r\n        this.dObject.model = item;\r\n        this.formKey = !this.formKey;\r\n      }\r\n      // }\r\n      // } else {\r\n      //   var id = fun.guid();\r\n      //   item = fun.clone(this.defaultModel) || {};\r\n      //   item._id = id;\r\n      //   this.initEdit();\r\n      //   this.dObject.model = item;\r\n      //   this.editedTabs.push({\r\n      //     text: this.addButtonCaption,\r\n      //     icon: \"mdi-new-box\",\r\n      //     // id: item._id,\r\n      //     // item: item,\r\n      //   });\r\n      //   this.edited = this.editedTabs.length;\r\n      // }\r\n      return this.editedTabs;\r\n    },\r\n    bodySlots() {\r\n      return this.coloredFields;\r\n    },\r\n    toggleAllGroups() {\r\n      var that = this;\r\n      Object.keys(this.$refs).forEach(k => {\r\n        //console.log(this.$refs[k])\r\n        if (k == \"group\") {\r\n          that.$refs[k].$el.click();\r\n        }\r\n      });\r\n    },\r\n    filterData(f) {\r\n      this.table = this.originalRecords;\r\n      this.table = this.table.filter(r => {\r\n        try {\r\n          return f(r);\r\n        } catch (error) {\r\n          return true;\r\n        }\r\n      });\r\n    },\r\n    doTabFilter() {\r\n      if (!this.noTabSort) {\r\n        fun.sortArrayOfObjectsByProperties(this.filteredTabItems, [\"value\"]);\r\n      }\r\n      var that = this;\r\n      var curFilter = this.filteredTabItems[this.currentFilter];\r\n      this.editedTabs = [];\r\n      this.edited = null;\r\n      // if (!this.hideAllTabFilter) {\r\n      //   curFilter = this.filteredTabItems[this.currentFilter - 1];\r\n      // }\r\n      this.tabFilter = curFilter;\r\n      var getFilterValue = function(r) {\r\n        var value = r[curFilter.name];\r\n        if (curFilter.filterProperty) {\r\n          return (\r\n            r[curFilter.name][curFilter.filterProperty]\r\n              .toString()\r\n              .toLowerCase() == curFilter.value.toString().toLowerCase()\r\n          );\r\n        } else if (typeof curFilter.value == \"object\") {\r\n          return (\r\n            JSON.stringify(r[curFilter.name]) == JSON.stringify(curFilter.value)\r\n          );\r\n        } else if (curFilter.notEmpty) {\r\n          return r[curFilter.name];\r\n        } else if (Array.isArray(r[curFilter.name])) {\r\n          return r[curFilter.name].includes(curFilter.value);\r\n        } else {\r\n          var filterValue = curFilter.value;\r\n          if (typeof filterValue == \"string\") {\r\n            filterValue = filterValue.toString().toLowerCase();\r\n          } else {\r\n            return r[curFilter.name] == curFilter.value;\r\n          }\r\n          if (!filterValue.startsWith(\"!\")) {\r\n            return (\r\n              r[curFilter.name].toString().toLowerCase() ==\r\n              curFilter.value.toString().toLowerCase()\r\n            );\r\n          } else {\r\n            return (\r\n              r[curFilter.name].toString().toLowerCase() !=\r\n              curFilter.value\r\n                .toString()\r\n                .toLowerCase()\r\n                .replace(\"!\", \"\")\r\n            );\r\n          }\r\n        }\r\n      };\r\n\r\n      this.table = this.originalRecords.filter(r => {\r\n        if (!r.active) {\r\n          // console.log(\"inactive\");\r\n        }\r\n        return curFilter && curFilter.name\r\n          ? (curFilter.empty && !r[curFilter.name]) ||\r\n              ((r[curFilter.name] || r[curFilter.name] == false) &&\r\n                (curFilter.value || curFilter.value == false) &&\r\n                getFilterValue(r))\r\n          : true;\r\n      });\r\n      // this.computedHeaders = fun.clone(this.originalHeaders);\r\n      if (curFilter && curFilter.options) {\r\n        curFilter.options.forEach(h => {\r\n          if (h.hideHeaders) {\r\n            this.computedHeaders = this.computedHeaders.filter(c => {\r\n              return !h.hideHeaders.includes(c.value);\r\n            });\r\n          }\r\n          if (h.tableInsertable == false) {\r\n            //\r\n\r\n            that.hasSearch = false;\r\n\r\n            that.hideTopBar = true;\r\n          }\r\n        });\r\n      }\r\n\r\n      if (curFilter && curFilter.renameHeaders) {\r\n        curFilter.renameHeaders.forEach(h => {\r\n          var header = Object.keys(h)[0];\r\n          this.computedHeaders.forEach(c => {\r\n            if (c.value == header) {\r\n              c.text = h[header];\r\n            }\r\n          });\r\n        });\r\n      }\r\n      this.checkTabOptions();\r\n      // this.computedHeaders.splice(1, 1);\r\n      return curFilter;\r\n    },\r\n    log(e) {\r\n      console.log(e);\r\n    },\r\n    dragstart(header) {\r\n      this.draggedHeader = header;\r\n    },\r\n    drop(targetHeader) {\r\n      if (!this.draggedHeader) return;\r\n      const fromIndex = this.headers.indexOf(this.draggedHeader);\r\n      const toIndex = this.headers.indexOf(targetHeader);\r\n      this.headers.splice(fromIndex, 1);\r\n      this.headers.splice(toIndex, 0, this.draggedHeader);\r\n      this.draggedHeader = null;\r\n      this.saveColumnOrder();\r\n    },\r\n    toggleColumn(header) {\r\n      header.hidden = !header.hidden;\r\n      this.saveColumnOrder();\r\n    },\r\n    saveColumnOrder() {\r\n      // Save the updated column order and hidden state to your MongoDB database\r\n      // You can use either the MongoDB native driver or an ORM like Mongoose to interact with your database\r\n    },\r\n    updateFilter() {\r\n      var that = this;\r\n      var curFilter = this.doTabFilter();\r\n      this.initEdited();\r\n\r\n      this.autoAssign();\r\n      if (this.defaultModel) {\r\n        this.dModel = this.defaultModel;\r\n      }\r\n      if (curFilter) {\r\n        if (!this.serverPagination) {\r\n          this.dModel[curFilter.name] = curFilter.value;\r\n        } else {\r\n          console.log(\"do server search\");\r\n          if (this.initialQry) {\r\n            this.tabQry = {};\r\n            this.itemsCount = 0;\r\n            if (curFilter.valueFn) {\r\n              this.tabQry = eval(curFilter.valueFn);\r\n            } else {\r\n              this.tabQry[curFilter.name] = curFilter.value;\r\n            }\r\n\r\n            // this.initialQry.$and.push(tabQry);\r\n            this.loadFromDb();\r\n          }\r\n        }\r\n      }\r\n    },\r\n    applyCustomQry(id) {\r\n      var customQry = this.additionalModel.custom_qry.find(c => {\r\n        return c._id == id;\r\n      });\r\n      if (customQry) {\r\n        this.qryExplanation = customQry.description;\r\n        this.assistantQry = customQry.qry;\r\n        this.itemsCount = 0;\r\n        this.loadFromDb();\r\n      }\r\n    },\r\n    applyFilter(e) {\r\n      console.log(e);\r\n      var filterIndex = this.filteredTabItems.findIndex(\r\n        obj => obj && obj.value === e\r\n      );\r\n      // if (this.hasDefaultTab) {\r\n      //   filterIndex += 1;\r\n      // }\r\n      this.currentFilter = filterIndex;\r\n      if (this.currentFilter == -1) {\r\n        this.tabQry = null;\r\n        this.itemsCount = 0;\r\n        if (this.doServerPagination) {\r\n          this.loadFromDb();\r\n        }\r\n      }\r\n    },\r\n    applyFilterOnEnter(event) {\r\n      if (event.key === \"Enter\") {\r\n        this.applyFilter();\r\n      }\r\n    },\r\n    checkTabOptions() {\r\n      // if (!this.filterTabs) {\r\n      //   return;\r\n      // }\r\n      var that = this;\r\n      this.keepHeaders = false;\r\n      // var curTab = this.filterTabs[this.currentFilter];\r\n      if (this.tabFilter && this.tabFilter.options) {\r\n        this.tabFilter.options.forEach(o => {\r\n          var key = Object.keys(o)[0];\r\n          if (key == \"showHeaders\") {\r\n            if (!Array.isArray(o[key])) {\r\n              o[key] = [o[key]];\r\n            }\r\n            o[key].forEach(opt => {\r\n              if (that.computedHeaders[opt]) {\r\n                that.computedHeaders[opt].hidden = false;\r\n                that.computedHeaders[opt].show = true;\r\n              }\r\n            });\r\n            this.keepHeaders = true;\r\n          } else if (key == \"hideHeaders\") {\r\n            if (!Array.isArray(o[key])) {\r\n              o[key] = [o[key]];\r\n            }\r\n            o[key].forEach(opt => {\r\n              if (that.computedHeaders[opt]) {\r\n                that.computedHeaders[opt].hidden = true;\r\n                that.computedHeaders[opt].show = false;\r\n              }\r\n            });\r\n            this.keepHeaders = true;\r\n          } else {\r\n            that[key] = o[key];\r\n          }\r\n        });\r\n\r\n        that.computedHeaders[that.computedHeaders.length - 1].show =\r\n          that.tableEditRow;\r\n      } else {\r\n        that.checkHiddenHeaders();\r\n      }\r\n    },\r\n    checkHiddenHeaders() {\r\n      var that = this;\r\n      if (\r\n        that.initialHideHeaders &&\r\n        ((!that.hideAllTabFilter && that.currentFilter) ||\r\n          that.hideAllTabFilter)\r\n      ) {\r\n        that.initialHideHeaders.forEach(opt => {\r\n          that.computedHeaders[opt].show = false;\r\n        });\r\n      }\r\n    },\r\n    updateDisablePagination() {\r\n      this.tableKey = !this.tableKey;\r\n    },\r\n    // sortTabItems() {\r\n    //   this.filterItems = this.filterItems.sort((a, b) =>\r\n    //     a.caption.localeCompare(b.caption)\r\n    //   );\r\n    // },\r\n    updateAdditionalTabs(t) {\r\n      if (!this.additionalTabs) {\r\n        this.additionalTabs = {};\r\n      }\r\n      if (t) {\r\n        this.additionalTabs = {\r\n          ...this.additionalTabs,\r\n          ...t\r\n        };\r\n      }\r\n\r\n      // if (this.additionalTabs) {\r\n      Object.keys(this.additionalTabs).forEach(k => {\r\n        if (\r\n          !this.filterItems.some(f => {\r\n            return f.value == k;\r\n          })\r\n        ) {\r\n          this.filterItems.push({\r\n            caption: this.capitalize(k),\r\n            // name: this.filterItems[0].name,\r\n            value: k,\r\n            filter: this.additionalTabs[k]\r\n          });\r\n        }\r\n      });\r\n      // }\r\n    },\r\n    updateItemsPerPage() {\r\n      // this.tableKey = !this.tableKey;\r\n      this.itemsPerPageChanged = true;\r\n      this.serverItemsLength = -1;\r\n      // this.serverItemsLength = parseInt(this.itemsPerPageEdited);\r\n      // this.itemsPerPageEdited = parseInt(this.itemsPerPageEdited, 10);\r\n      //\r\n      this.pageStart = 1;\r\n      this.pageStop = this.itemsPerPageEdited;\r\n      this.itemsLength = this.table.length;\r\n      if (this.itemsPerPageEdited > this.table.length) {\r\n        this.serverItemsLength = this.itemsPerPageEdited;\r\n        this.pageStop = this.table.length;\r\n        // } else {\r\n        //   this.serverItemsLength = parseInt(this.itemsPerPageEdited);\r\n      }\r\n      // this.itemsPerPageChanged = false;\r\n\r\n      // this.itemsPerPageEdited > this.table.length\r\n      //   ? this.table.length\r\n      //   : this.itemsPerPageEdited;\r\n      // this.tableMount();\r\n      // this.$refs.dTable.options.page = 1;\r\n      // this.tableKey = !this.tableKey;\r\n      // this.getData();\r\n      // this.tableMount();\r\n    },\r\n    updateOriginalRecords() {\r\n      var that = this;\r\n      let tableIds = this.table.map(record => record._id);\r\n      if (!tableIds) {\r\n        return;\r\n      }\r\n      let remainingRecords = this.originalRecords.filter(\r\n        record => !tableIds.includes(record._id)\r\n      );\r\n\r\n      // Removed records\r\n      this.originalRecords = remainingRecords.concat(this.table);\r\n\r\n      // this.originalRecords = this.originalRecords.filter(record => !tableIds.includes(record.id));\r\n\r\n      // this.table.forEach((record) => {\r\n      //   var origRec = that.originalRecords.filter((r) => {\r\n      //     return r._id == record._id;\r\n      //   })[0];\r\n      //   // let index = that.originalRecords.findIndex((r) => r.id === record.id);\r\n\r\n      //   // if (index !== -1) {\r\n      //   //   that.originalRecords[index] = record;\r\n      //   // }\r\n      //   if (origRec) {\r\n      //     origRec = record;\r\n      //   }\r\n      // });\r\n    },\r\n    virtualScroll() {\r\n      // const table = this.$refs.dTable.$el.querySelector(\r\n      //   \".v-data-table__wrapper\"\r\n      // );\r\n      // const outerScroll = this.$refs.outerScroll;\r\n      // const innerScroll = outerScroll.querySelector(\".inner-scroll\");\r\n      //data-table-wrap\r\n      const table = document.getElementsByClassName(\"v-data-table__wrapper\")[0];\r\n      const tableWrap = document.getElementsByClassName(\"data-table-wrap\")[0];\r\n      // if (\r\n      //   tableWrap &&\r\n      //   !this.$root.isMobile &&\r\n      //   !this.disablePagination &&\r\n      //   !this.isFullScreen\r\n      // ) {\r\n      //   tableWrap.style.maxHeight = `${screen.height -\r\n      //     table.offsetTop -\r\n      //     450}px`;\r\n      // }\r\n\r\n      // Set the width of the inner scroll element to match the table's scroll width\r\n      // innerScroll.style.width = `${table.scrollWidth}px`;\r\n\r\n      // Event listener for table scrolling\r\n      // table.addEventListener(\"scroll\", () => {\r\n      //   outerScroll.scrollLeft = table.scrollLeft;\r\n      // });\r\n\r\n      // // Event listener for outer scrolling\r\n      // outerScroll.addEventListener(\"scroll\", () => {\r\n      //   table.scrollLeft = outerScroll.scrollLeft;\r\n      // });\r\n    },\r\n    addDefaultFilter() {\r\n      var defaultFilter =\r\n        this.defaultTabCaption || \"All \" + fun.capitalize(this.tableName);\r\n      if (\r\n        !this.hasDefaultTab\r\n        // &&\r\n        // !this.filterItems[0].value.toLowerCase().startsWith(\"all \") &&\r\n        // !this.filterItems[0].value.toLowerCase().startsWith(\"add \")\r\n      ) {\r\n        this.filterItems.unshift({\r\n          caption: defaultFilter,\r\n          value: defaultFilter\r\n        });\r\n      }\r\n    },\r\n    addDefaultTab() {\r\n      if (!this.hideAllTabFilter && this.filterItems.length > 1) {\r\n        // var defaultFilter =\r\n        //   this.defaultTabCaption || \"All \" + fun.capitalize(this.tableName);\r\n        // if (\r\n        //   !this.hasDefaultTab\r\n        //   // &&\r\n        //   // !this.filterItems[0].value.toLowerCase().startsWith(\"all \") &&\r\n        //   // !this.filterItems[0].value.toLowerCase().startsWith(\"add \")\r\n        // ) {\r\n        //   this.filterItems.unshift({\r\n        //     caption: defaultFilter,\r\n        //     value: defaultFilter,\r\n        //   });\r\n        // }\r\n        fun.sortObjects(this.filterItems, \"value\");\r\n        this.addDefaultFilter();\r\n        this.hasDefaultTab = 1;\r\n      }\r\n    },\r\n    handleGroupDescChange(f) {\r\n      console.log(f);\r\n    },\r\n    getTableTop() {\r\n      if (this.$refs[\"dTable\"]) {\r\n        return this.$refs[\"dTable\"].getBoundingClientRect().top;\r\n      } else {\r\n        return 0;\r\n      }\r\n    }\r\n  },\r\n  directives: {\r\n    draggable: {\r\n      bind(el, binding, vnode) {\r\n        var that = this;\r\n        const options = {\r\n          animation: 150,\r\n          onUpdate: function(event) {\r\n            vnode.child.$emit(\"sorted\", event);\r\n            vnode.child.$root.$emit(\"rowReordered\", vnode.child);\r\n          },\r\n          handle: \".drag-handle\"\r\n        };\r\n        if (vnode.context.isDraggable) {\r\n          Sortable.create(el.getElementsByTagName(\"tbody\")[0], options);\r\n        }\r\n      }\r\n    }\r\n  },\r\n\r\n  mounted() {\r\n    var that = this;\r\n    this.updateHeight();\r\n    window.addEventListener(\"resize\", this.updateHeight);\r\n    this.initEdited();\r\n    this.doServerPagination = this.serverPagination;\r\n    if (this.data_object) {\r\n      this.initialQry = fun.clone(this.data_object.qry);\r\n    }\r\n\r\n    //        this.remoteSearchFields.join(\", \") +\r\n    if (this.remoteSearchFields && this.minSearchLength) {\r\n      var searchFields = [];\r\n      this.remoteSearchFields.forEach(f => {\r\n        searchFields.push(fun.capitalize(f));\r\n      });\r\n      this.searchLabel =\r\n        \"First \" +\r\n        this.minSearchLength +\r\n        \" char of \" +\r\n        searchFields.join(\" or \");\r\n    }\r\n    this.breakpoint = this.mobileBreakpoint || 600;\r\n    if (this.$vuetify.breakpoint.smAndDown && !this.mobileBreakpoint) {\r\n      this.breakpoint = 600;\r\n    }\r\n\r\n    this.activeTab = this.$root.activeTab;\r\n    document.arrive(\"input[k='\" + this.focusOnInsert + \"']\", a => {\r\n      if (a && that.insertMode) {\r\n        a.click();\r\n        that.insertMode = false;\r\n      }\r\n    });\r\n    document.arrive(\".v-data-table\", t => {\r\n      if (t) {\r\n        that.virtualScroll();\r\n      }\r\n      if (this.breakpoint && this.$root.isMobile) {\r\n        document\r\n          .getElementsByClassName(\"v-data-table\")[0]\r\n          .classList.add(\"mobile-list\");\r\n      }\r\n    });\r\n    this.tableMount();\r\n    var specialFields = [\r\n      ...(this.dialogFields || []),\r\n      ...(this.coloredFields || [])\r\n    ];\r\n    specialFields.forEach(f => {\r\n      if (typeof f == \"string\") {\r\n        this.specialFields.push({\r\n          model: f\r\n        });\r\n      } else {\r\n        this.specialFields.push(f);\r\n      }\r\n    });\r\n    if (this.getItems) {\r\n      this.$root.$on(\"get_menu_items\", function(r) {\r\n        // if (that._uid != that.$root.shipmentUid) {\r\n        //   return;\r\n        // }\r\n        that.menuItems = r.items;\r\n        that.menuButtonKey = !that.menuButtonKey;\r\n      });\r\n      return;\r\n    }\r\n    // this.virtualScroll()\r\n  },\r\n  activated() {\r\n    // this.initEdited();\r\n  },\r\n  watch: {\r\n    showAdvancedSearch() {\r\n      if (!this.showAdvancedSearch) {\r\n        this.searchModel = {};\r\n      }\r\n    },\r\n    // vModel: {\r\n    //   handler: function(newValue, oldValue) {\r\n    //     console.log(newValue);\r\n    //   },\r\n    // },\r\n\r\n    edited() {\r\n      this.$root.$emit(\"edited\", this);\r\n      // if (this.edited != null) {\r\n      //   this.delBtnKey = !this.delBtnKey;\r\n      // }\r\n      //\r\n    },\r\n    isFullScreen() {\r\n      this.updateHeight();\r\n    },\r\n    searchTabQuery() {\r\n      if (!this.searchTabQuery) {\r\n        this.currentFilter = 0;\r\n      }\r\n    },\r\n\r\n    searchModel: {\r\n      handler: function(newValue, oldValue) {\r\n        var that = this;\r\n\r\n        that.doTabFilter();\r\n        if (this.searchModel) {\r\n          Object.keys(this.searchModel).forEach(k => {\r\n            if (this.searchModel[k] && this.searchModel[k].length) {\r\n              Object.keys(this.schema.properties).forEach(h => {\r\n                if (h == k) {\r\n                  if (this.schema.properties[h].filter) {\r\n                    // console.log(that.table);\r\n                    // console.log(this.schema.properties[h].filter);\r\n\r\n                    that.table = that.table.filter(r => {\r\n                      try {\r\n                        var rec = r[h];\r\n                        if (that.schema.properties[h].template) {\r\n                          try {\r\n                            rec = eval(that.schema.properties[h].template);\r\n                          } catch (error) {\r\n                            //\r\n                          }\r\n                        }\r\n                        var v = newValue[h];\r\n                        var includes = function() {\r\n                          return rec.includes(v);\r\n                        };\r\n                        var inArray = function() {\r\n                          if (v.length) {\r\n                            return v\r\n                              .toString()\r\n                              .toLowerCase()\r\n                              .split(\",\")\r\n                              .includes(rec.toString().toLowerCase());\r\n                          } else {\r\n                            return true;\r\n                          }\r\n                        };\r\n                        var range = function() {\r\n                          return rec >= v[0] && rec <= v[1];\r\n                        };\r\n                        var dayRangeFilter = function() {\r\n                          var range = v.split(\"-\");\r\n                          var minDate = new Date(range[0]);\r\n                          var maxDate = null;\r\n                          if (range[1].toString().trim()) {\r\n                            maxDate = new Date(range[1]);\r\n                          }\r\n                          var dates = rec.split(\"-\");\r\n\r\n                          var dMin = new Date(dates[0]);\r\n\r\n                          var dMax = null;\r\n                          if (dates[1] && dates[1].toString().trim()) {\r\n                            dMax = new Date(dates[1]);\r\n                          }\r\n                          if (minDate && maxDate) {\r\n                            if (dMin && dMax) {\r\n                              return dMin <= maxDate && dMax >= minDate;\r\n                            } else {\r\n                              return dMin >= minDate && dMin <= maxDate;\r\n                            }\r\n                          } else {\r\n                            if (dMin && dMax) {\r\n                              return dMin >= minDate && dMax <= minDate;\r\n                            } else {\r\n                              return dMin >= minDate;\r\n                            }\r\n                          }\r\n                        };\r\n                        var isString = !that.schema.properties[h][\"x-display\"];\r\n                        if (rec && that.schema.properties[h].filter && v) {\r\n                          if (isString) {\r\n                            rec = rec.toString().toLowerCase();\r\n                          }\r\n\r\n                          var include = eval(\r\n                            that.schema.properties[h].filter + \"()\"\r\n                          );\r\n                          // console.log(include);\r\n                          return include;\r\n                        } else {\r\n                          return false;\r\n                        }\r\n                      } catch (error) {\r\n                        console.log(\"error search\", error);\r\n                        return false;\r\n                      }\r\n                    });\r\n                    // console.log(that.table);\r\n                  }\r\n                }\r\n              });\r\n            }\r\n          });\r\n        }\r\n      },\r\n      deep: true\r\n    },\r\n    table: {\r\n      handler: function(newValue, oldValue) {\r\n        if (oldValue.length && !this.filterChanged) {\r\n          this.updateOriginalRecords();\r\n          this.$emit(\"input\", this.originalRecords);\r\n          this.$root.$emit(\"tableChanged\", this);\r\n          if (!this.skipRecalculation) {\r\n            this.$root.$emit(\"recalculateFields\", this);\r\n          }\r\n        }\r\n\r\n        this.filterChanged = false;\r\n        // console.log(\"totals\", this.tableTotal);\r\n      },\r\n      deep: true\r\n      // immediate: true,\r\n    },\r\n    update: {\r\n      handler: function(newValue, oldValue) {\r\n        // if (oldValue.length) {\r\n        this.$root.$emit(\"updateChanged\", this);\r\n        // }\r\n      },\r\n      deep: true\r\n      // immediate: true,\r\n    },\r\n    selected: function(r) {\r\n      // console.log(this.selected);\r\n      this.$root.$emit(\"tableSelectionChanged\", this);\r\n    },\r\n    search: function(r) {\r\n      if (this.remoteSearch || this.doServerPagination) {\r\n        this.itemsCount = 0;\r\n        if (\r\n          (!this.search || this.searchAfterCompleted) &&\r\n          !this.doServerPagination\r\n        ) {\r\n          // if (this.itemsCount <= this.table.length) {\r\n          this.tableReady = false;\r\n\r\n          return;\r\n          // }\r\n        }\r\n        if (!this.search || this.search.length >= this.minSearchLength) {\r\n          this.tableReady = true;\r\n          this.loadFromDb();\r\n        } else {\r\n          if (!this.doServerPagination || this.maxRecords) {\r\n            return;\r\n          } else {\r\n            if (this.search && this.search.length >= this.minSearchLength) {\r\n              this.buildSearchQuery();\r\n              this.loadFromDb();\r\n            } else if (!this.search) {\r\n              this.tableMount();\r\n            }\r\n          }\r\n        }\r\n      }\r\n    },\r\n    currentFilter: {\r\n      handler: function(newValue, oldValue) {\r\n        // if (this.additionalTabs) {\r\n        var ind = this.hideAllTabFilter ? 0 : 0;\r\n        var tab = this.filteredTabItems[newValue - ind];\r\n        if (this.additionalTabs && tab) {\r\n          this.searchModel = tab.filter;\r\n          //\r\n        }\r\n        // }\r\n        var that = this;\r\n        if (!this.currentFilter) {\r\n          this.tabKey = !this.tabKey;\r\n        }\r\n        this.updateFilter();\r\n        this.$root.$emit(\"tableFilterChanged\", this);\r\n        // this.$root.$emit(\"recalculateFields\", this);\r\n        this.filterChanged = true;\r\n        this.filterComboKey = !this.filterComboKey;\r\n        // this.getColumns();\r\n        this.checkTabOptions();\r\n        this.checkHiddenHeaders();\r\n      },\r\n      deep: true\r\n    },\r\n    dialog: function() {\r\n      // console.log(this.dialog);\r\n      if (this.dialog && this.isNew) {\r\n        this.resetModel();\r\n      }\r\n      // this.formKey = !this.formKey;\r\n    },\r\n\r\n    insertedRow: {\r\n      handler: function(newValue, oldValue) {\r\n        console.log(newValue, oldValue);\r\n\r\n        if (oldValue && oldValue._id && !newValue._id) {\r\n          return;\r\n        }\r\n\r\n        if (this.tableInsertable && oldValue) {\r\n          var rowChanged = !fun.objectEqual(newValue, this.newRow, this._id);\r\n          this.blankRow(rowChanged);\r\n        }\r\n      },\r\n      deep: true\r\n    },\r\n\r\n    doSubmit: function() {\r\n      this.submit();\r\n    },\r\n    searchInput: function(input) {\r\n      console.log(input);\r\n    },\r\n    originalRecords: {\r\n      handler: function(newValue, oldValue) {\r\n        // console.log(this.originalRecords);\r\n        // this.$root.$emit()\r\n      }\r\n      // deep: true,\r\n    },\r\n    formModel: {\r\n      handler: function(newValue, oldValue) {\r\n        // console.log(this.formModel);\r\n        if (this.refreshHeadersOnFormChange && !this.keepHeaders) {\r\n          this.filterHeaders();\r\n        }\r\n      },\r\n      deep: true\r\n    },\r\n    page: function() {\r\n      console.log(this.page);\r\n    }\r\n  },\r\n  computed: {\r\n    safeToolBarControls() {\r\n      // Check if toolBarControls is truthy and an array; return it or an empty array\r\n      return this.toolBarControls\r\n        ? this.toolBarControls.filter(\r\n            c =>\r\n              !c.notParent ||\r\n              (this.parentObject && !this.parentObject[c.notParent])\r\n          ) || []\r\n        : [];\r\n      //toolBarItemsExcluded\r\n    },\r\n\r\n    filteredTabItems() {\r\n      // this.filterItems.concat(Object.keys(this.additionalTabs));\r\n      // this.sortTabItems();\r\n\r\n      this.updateAdditionalTabs();\r\n      this.addDefaultTab();\r\n\r\n      return this.filterItems.filter(\r\n        tab =>\r\n          !this.searchTabQuery ||\r\n          tab.value.toLowerCase().includes(this.searchTabQuery.toLowerCase())\r\n      );\r\n    },\r\n    tableTotal() {\r\n      var tot = [];\r\n      if (this.totalFields) {\r\n        this.totalFields.forEach(f => {\r\n          tot.push({\r\n            field: f,\r\n            total: fun.sumOf(this.table, f)\r\n          });\r\n\r\n          //\r\n        });\r\n      }\r\n      return tot;\r\n    },\r\n    tblStyle() {\r\n      var width = screen.width;\r\n      if (this.$vuetify.breakpoint.smAndDown) {\r\n        return \"width:\" + width - 20 + \"px; overflow:auto; \";\r\n      } else {\r\n        return \"\";\r\n      }\r\n    },\r\n    filteredHeaders() {\r\n      return this.$vuetify.breakpoint.smAndDown\r\n        ? this.computedHeaders.filter(header =>\r\n            this.mobileHeaders.includes(header.value)\r\n          )\r\n        : this.computedHeaders;\r\n    },\r\n    filteredItems() {\r\n      // var tableItems = fun.clone(this.table);\r\n      // tableItems.forEach((t) => {\r\n      //   Object.keys(t).forEach((k) => {\r\n      //     t[k] = this.getTemplate(t, { name: k }) || t[k];\r\n      //   });\r\n      // });\r\n\r\n      if (this.$vuetify.breakpoint.smAndDown) {\r\n        return this.table.filter(item => {\r\n          return this.mobileHeaders.some(header => {\r\n            const value = item[header.value];\r\n            return value !== null && value !== undefined && value !== \"\";\r\n          });\r\n        });\r\n      } else {\r\n        return this.table;\r\n      }\r\n    },\r\n    // computedTable() {\r\n    //   if (this.tabFilter) {\r\n    //     var curFilter = this.tabFilter;\r\n    //     var table = this.originalRecords.filter((r) => {\r\n    //       return curFilter && curFilter.name\r\n    //         ? r[curFilter.name] &&\r\n    //             curFilter.value &&\r\n    //             r[curFilter.name].toString().toLowerCase() ==\r\n    //               curFilter.value.toLowerCase()\r\n    //         : true;\r\n    //     });\r\n    //     return table;\r\n    //   } else {\r\n    //     return this.table;\r\n    //   }\r\n    // },\r\n    searchTrigger() {\r\n      return this.searchLen &&\r\n        this.search &&\r\n        this.search.length >= this.searchLen\r\n        ? this.search\r\n        : \"\";\r\n    }\r\n  }\r\n};\r\n</script>\r\n\r\n<style>\r\n/* .pager {\r\n  cursor: pointer;\r\n} */\r\n.edit-bar {\r\n  position: absolute;\r\n  bottom: 20px;\r\n  right: 0;\r\n}\r\n\r\n.table-toolbar,\r\n.table-toolbar div {\r\n  background-color: transparent !important;\r\n}\r\n\r\n.table-title {\r\n  font-weight: normal;\r\n}\r\n\r\n.top-table-header {\r\n  /* position: fixed; */\r\n}\r\n\r\n.filter-tabs {\r\n  position: relative;\r\n}\r\n\r\n.filter-tabs .v-item-group {\r\n  /* left: 100px; */\r\n  /* position: absolute; */\r\n}\r\n\r\n.tab-search {\r\n  position: absolute;\r\n  left: -8px;\r\n  top: -10px;\r\n}\r\n\r\n.per-page-width {\r\n  width: 100px;\r\n}\r\n\r\n.bootom-bar {\r\n  width: 100lvh;\r\n}\r\n\r\n.fixed-footer {\r\n  position: fixed;\r\n  bottom: 0;\r\n  left: 400px;\r\n}\r\n\r\n.row-pointer {\r\n  /* padding: 10px; */\r\n}\r\n\r\n.hidden-row {\r\n  display: none;\r\n}\r\n\r\n.v-data-table__wrapper {\r\n  width: initial !important;\r\n  overflow: initial !important;\r\n}\r\n\r\n.v-data-table__wrapper tr {\r\n  position: relative !important;\r\n}\r\n\r\n/* thead,\r\ntbody tr {\r\n  display: table;\r\n  width: 100%;\r\n} */\r\n.data-table-wrap {\r\n  max-height: 66vh;\r\n  /* max-height: 48vh !important; */\r\n  overflow-x: auto;\r\n  overflow-y: auto;\r\n}\r\n\r\n.full-screen .data-table-wrap {\r\n  max-height: 78vh !important;\r\n  height: 78vh !important;\r\n  overflow-y: initial !important;\r\n  z-index: 3;\r\n}\r\n\r\n.full-screen .v-data-table__wrapper {\r\n  height: initial !important;\r\n}\r\n\r\n.data-table-wrap-no-hor {\r\n  overflow-y: auto;\r\n  /* max-height: 65vh !important; */\r\n}\r\n\r\n.outer-scroll {\r\n  overflow-x: auto;\r\n  overflow-y: hidden;\r\n  /* width: 200%; */\r\n\r\n  height: 20px;\r\n  /* Height of the virtual scroll bar */\r\n}\r\n\r\n.inner-scroll {\r\n  height: 100%;\r\n\r\n  /* background-color: #3a3737; */\r\n}\r\n\r\n.theme--light .inner-scroll {\r\n  background-color: white;\r\n}\r\n\r\n.theme--dark .inner-scroll {\r\n  background-color: #121212;\r\n}\r\n\r\n.edit-dialog-wrapper {\r\n  left: var(--edit-dialog-left) !important;\r\n  width: var(--edit-dialog-width);\r\n}\r\n\r\n.v-data-table tr {\r\n  height: 60px !important;\r\n}\r\n\r\n.column-list {\r\n  height: 400px;\r\n  overflow: auto;\r\n}\r\n\r\n.custom-badge-position .v-badge__badge {\r\n  transform: scale(0.9) translate(-10px, 10px);\r\n  /* Adjust positioning */\r\n}\r\n\r\n.top {\r\n  z-index: 100;\r\n}\r\n\r\n.grid-list {\r\n  display: flex;\r\n  flex-wrap: wrap;\r\n  gap: 16px;\r\n  border: 2px dashed #ccc;\r\n  padding: 16px;\r\n  border-radius: 8px;\r\n}\r\n\r\n.grid-item {\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  margin: 5px;\r\n  width: 200px;\r\n  height: 300px;\r\n  border: 1px solid #ccc;\r\n  border-radius: 8px;\r\n  background-color: #f9f9f9;\r\n  cursor: grab;\r\n  transition: background-color 0.2s, transform 0.2s;\r\n}\r\n\r\n.grid-item:active {\r\n  cursor: grabbing;\r\n}\r\n\r\n.grid-item:hover {\r\n  background-color: #e0e0e0;\r\n  transform: scale(1.05);\r\n}\r\n\r\n.item-content {\r\n  text-align: center;\r\n  font-size: 16px;\r\n  font-weight: bold;\r\n}\r\n\r\n.drop-zone {\r\n  min-height: 50px;\r\n  /* display: flex; */\r\n  /* align-items: center; */\r\n  /* justify-content: center; */\r\n  border: 2px dashed #aaa;\r\n  /* background-color: #e0e0e0; */\r\n  margin-top: 10px;\r\n  cursor: pointer;\r\n  transition: background-color 0.2s ease;\r\n}\r\n\r\n.drop-zone:hover {\r\n  background-color: #e0e0e0;\r\n  /* Change color on hover to show it's a drop target */\r\n}\r\n\r\n.chip-text {\r\n  /* background-color: white; */\r\n  color: white;\r\n  font-weight: 600;\r\n  /* color: black; */\r\n  padding: 2px;\r\n  cursor: pointer;\r\n  min-width: 50px;\r\n  /* border-radius: 5px; */\r\n}\r\n\r\n.horizontal-list {\r\n  display: flex;\r\n  flex-direction: row;\r\n  gap: 16px;\r\n  /* Add space between items */\r\n}\r\n\r\n.horizontal-item {\r\n  width: 100px;\r\n  /* Set a fixed width for list items */\r\n  text-align: center;\r\n  border: 1px solid #ccc;\r\n  /* Optional: Add a border for visibility */\r\n  border-radius: 4px;\r\n  cursor: grab;\r\n}\r\n\r\n.horizontal-item:active {\r\n  cursor: grabbing;\r\n}\r\n.search-menu {\r\n  height: 30px !important;\r\n  display: flex;\r\n  flex-direction: column; /* Stack items vertically */\r\n  align-items: flex-start; /* Align items to the top */\r\n  justify-content: flex-start; /* Ensure no unwanted spacing */\r\n}\r\n\r\n.bottom-bar .v-toolbar__content {\r\n  width: 100% !important;\r\n  padding: 0 !important;\r\n  /* margin-left: -20px !important; */\r\n}\r\n\r\n.card-actions {\r\n  position: fixed;\r\n  bottom: 0;\r\n  right: 30%;\r\n  width: calc(100% -15px);\r\n  z-index: 100;\r\n}\r\n\r\n.v-data-table__selected {\r\n  background-color: rgba(255, 255, 0, 0.363) !important;\r\n  /* color: white !important; */\r\n  font-weight: bold !important;\r\n}\r\n.v-dialog {\r\n  overflow-x: hidden !important;\r\n}\r\n.v-tab {\r\n  /* background-color: white; */\r\n  margin: 1px !important;\r\n}\r\n\r\n.colored .text-start {\r\n  color: white;\r\n  max-height: 30px !important;\r\n}\r\n\r\n.colored a {\r\n  color: white;\r\n}\r\n\r\n.editable a {\r\n  color: white;\r\n}\r\n.v-data-table-header {\r\n  z-index: 3 !important;\r\n}\r\n\r\n.v-data-table-header th {\r\n  /* text-transform: uppercase !important; */\r\n  font-size: 16px !important;\r\n  z-index: 3 !important;\r\n}\r\n\r\n.expanded-item {\r\n  background-color: gray;\r\n}\r\n\r\n@media only screen and (min-height: 600px) {\r\n  /* .special-button {\r\n    padding-top: 36px !important;\r\n  } */\r\n  .edited-form {\r\n    height: 55vh;\r\n    overflow: auto;\r\n    position: relative;\r\n  }\r\n  .theme--light .v-data-table-header th {\r\n    z-index: 0 !important;\r\n    background-color: #666669 !important;\r\n    color: white !important;\r\n  }\r\n\r\n  .theme--dark .v-data-table-header th {\r\n    background-color: #f5f5f5 !important;\r\n    color: black !important;\r\n  }\r\n}\r\n\r\n@media only screen and (max-width: 450px) {\r\n  .search-menu {\r\n    max-width: 300px;\r\n    margin-left: 10px;\r\n  }\r\n\r\n  .full-width {\r\n    width: 100%;\r\n  }\r\n\r\n  .draggable-item {\r\n    margin-top: 10px;\r\n    padding: 10px;\r\n    background-color: rgba(212, 219, 212, 0.843);\r\n    border: 2px solid #7f7a7a;\r\n    cursor: grab;\r\n    transition: background-color 0.2s ease;\r\n  }\r\n\r\n  .draggable-item:active {\r\n    cursor: grabbing;\r\n  }\r\n\r\n  .v-data-table__mobile-row__header {\r\n    font-weight: normal;\r\n    white-space: nowrap;\r\n    /* margin-top: 16px;\r\n    margin-bottom: 16px; */\r\n  }\r\n\r\n  .v-data-table__mobile-row {\r\n    margin-top: 12px;\r\n    margin-bottom: 12px;\r\n  }\r\n\r\n  .v-small-dialog__activator__content {\r\n    color: blue;\r\n    text-decoration: underline;\r\n    font-weight: bold;\r\n  }\r\n\r\n  .v-data-table.mobile-list {\r\n    overflow-x: hidden !important;\r\n  }\r\n\r\n  .v-btn__content,\r\n  .v-tab,\r\n  .active-tab {\r\n    font-size: small !important;\r\n  }\r\n\r\n  .pager {\r\n    font-size: small;\r\n    white-space: nowrap;\r\n  }\r\n\r\n  .v-data-table__mobile-row:not(:has(.v-data-table__mobile-row__cell:not(:empty))) {\r\n    display: none;\r\n  }\r\n\r\n  table {\r\n    border-collapse: collapse !important;\r\n  }\r\n\r\n  .v-data-table__mobile-row .v-chip.v-chip--outlined {\r\n    border: none !important;\r\n    margin: 0 !important;\r\n    padding: 0 !important;\r\n  }\r\n\r\n  .v-data-table__mobile-row {\r\n    min-height: 0px !important;\r\n  }\r\n\r\n  .v-data-table__mobile-row:first-child {\r\n    border-top: 1px solid #3a3737 !important;\r\n    padding-top: 10px !important;\r\n    /* background-color: #ccc !important; */\r\n  }\r\n\r\n  .header-toolbar {\r\n    /* width: 100%;\r\n    /* position: fixed; */\r\n    /* z-index: 100; */\r\n    top: 0;\r\n    left: -25px;\r\n  }\r\n\r\n  .bottom-toolbar {\r\n    width: 100%;\r\n    position: absolute;\r\n    /* z-index: 100; */\r\n    bottom: 0;\r\n    right: 0;\r\n  }\r\n\r\n  .special-button {\r\n    /* padding-left: 40px !important */\r\n  }\r\n\r\n  .v-data-table .v-tab {\r\n    /* color: white !important; */\r\n    margin: 5px !important;\r\n    border-top-right-radius: 5px;\r\n    border-top-left-radius: 5px;\r\n    font-size: 10px;\r\n    padding: 2px;\r\n    height: 30px;\r\n  }\r\n\r\n  .v-tabs--grow {\r\n    width: 100% !important;\r\n  }\r\n\r\n  .v-tab.active-tab {\r\n    /* color: yellow !important; */\r\n    /* font-weight: bold !important;*/\r\n\r\n    /*text-decoration-color: blue !important; */\r\n    font-size: 14px !important;\r\n\r\n    /* box-shadow: 3px !important; */\r\n  }\r\n\r\n  .v-slide-group__prev,\r\n  .v-slide-group__next {\r\n    padding: 2px;\r\n    margin: -5px;\r\n  }\r\n\r\n  .tablist {\r\n    margin: 1px;\r\n  }\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Table copy.vue?vue&type=style&index=0&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Table copy.vue?vue&type=style&index=0&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"parentContainer\"},[_c('div',{attrs:{\"hidden\":\"\"}},[_c('v-take-photo')],1),(!_vm.hideTitle)?_c('h3',[_vm._v(_vm._s(_vm.table_title || _vm.tableHeader))]):_vm._e(),(_vm.filterItems.length && _vm.filterItems.length > 1 && !_vm.noTabs && _vm.useTabs)?_c('v-tabs',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.hideFilterTabs),expression:\"!hideFilterTabs\"}],key:_vm.tabKey,staticClass:\"mt-2 filter-tabs\",attrs:{\"active-class\":\"active-tab\",\"continuous\":\"\",\"grow\":\"\",\"show-arrows\":\"\"},model:{value:(_vm.currentFilter),callback:function ($$v) {_vm.currentFilter=$$v},expression:\"currentFilter\"}},_vm._l((_vm.filteredTabItems),function(item){return _c('v-tab',{key:item.caption},[_vm._v(\" \"+_vm._s(item.caption)+\" \")])}),1):_vm._e(),_c('div',{class:{ 'full-screen': _vm.isFullScreen }},[_c('div',{staticClass:\"top-bar\"},[(!_vm.edited && _vm.getTotal && !_vm.data_object.hideTotal)?_c(_vm.$vuetify.breakpoint.smAndDown ? 'div' : 'v-toolbar',{tag:\"v-component\",class:{\n          'ml-n0 mr-n0 mb-4': _vm.$vuetify.breakpoint.smAndDown,\n          'ml-0 mb-0 mr-0': _vm.$vuetify.breakpoint.mdAndUp\n        },attrs:{\"flat\":\"\"}},[(\n            (!_vm.edited && !_vm.dList && !_vm.hideTitle && _vm.table_title) || _vm.table_title\n          )?_c('v-spacer'):_vm._e(),(\n            !_vm.edited && _vm.filterItems && _vm.filterItems.length && _vm.showFilterCombo\n          )?_c('v-spacer'):_vm._e(),(!_vm.edited && _vm.getTotal && !_vm.data_object.hideTotal && !_vm.dExcel)?_c('v-spacer'):_vm._e(),(!_vm.edited && _vm.getTotal && !_vm.data_object.hideTotal)?_c('v-chip',{ref:\"total\",staticClass:\"mt-n2\",attrs:{\"elevation-4\":\"\"}},[_vm._v(\" \"+_vm._s(!_vm.totals ? \"\" : _vm.totals.total.text)+\" \")]):_vm._e()],1):_vm._e(),((!_vm.hideTopBar || !_vm.noDelete || _vm.addButtonCaption) && !_vm.hideControls)?_c('v-toolbar',{key:_vm.toolbarKey,staticClass:\"table-toolbar\",attrs:{\"flat\":\"\"}},[(!_vm.edited && !_vm.noDelete && _vm.selectDelete)?_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n          var on = ref.on;\nreturn [_c('v-btn',_vm._g({class:_vm.dExcel ? \"ml-2\" : \"ml-2\",attrs:{\"icon\":\"\",\"disabled\":!_vm.selected.length},on:{\"click\":_vm.deleteSelected}},on),[_c('v-icon',{attrs:{\"color\":\"error\"}},[_vm._v(\"mdi-delete-sweep\")])],1)]}}],null,false,3169398473)},[_c('span',[_vm._v(\"Delete Selected\")])]):_vm._e(),(\n            !_vm.edited && !_vm.noDelete && !_vm.readonly && _vm.tableReady && _vm.table.length\n          )?_c('v-btn',_vm._g({key:_vm.delBtnKey,staticClass:\"ml-2\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.selectDelete = !_vm.selectDelete;\n            _vm.selected = [];}}},_vm.on),[(!_vm.selectDelete)?_c('v-icon',{attrs:{\"color\":\"error\"}},[_vm._v(\"mdi-minus-circle\")]):_vm._e(),(_vm.selectDelete)?_c('v-icon',[_vm._v(\"mdi-cancel\")]):_vm._e()],1):_vm._e(),(\n            _vm.addButtonCaption &&\n              !_vm.tableInsertable &&\n              !_vm.edited &&\n              !_vm.readonly &&\n              !_vm.addMenuButton\n          )?_c('v-btn',{staticClass:\"ma-0\",attrs:{\"color\":\"info\",\"text\":\"\"},on:{\"click\":function($event){return _vm.editCurrentRecord()}}},[_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-plus-circle\")])],1):_vm._e(),(_vm.noAddOnAllTab && !_vm.currentFilter)?_c('div',[_vm._v(\" Please \"+_vm._s(_vm.filterComboLabel)+\" to Add Record \")]):_vm._e(),_c('v-spacer'),(\n            (_vm.hasSearch && _vm.table.length) ||\n              _vm.search ||\n              _vm.remoteSearch ||\n              (_vm.searchModel && Object.keys(_vm.searchModel).length)\n          )?_c('v-menu',{attrs:{\"close-on-content-click\":false,\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){return [_c('v-text-field',{attrs:{\"hide-details\":\"\",\"prepend-inner-icon\":\"mdi-magnify\",\"append-icon\":_vm.hasAdvancedSearch\n                  ? 'mdi-clipboard-text-search'\n                  : _vm.searchAfterCompleted && _vm.search\n                  ? 'mdi-account-search'\n                  : '',\"label\":\"Search\",\"clearable\":\"\"},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }_vm.searchAfterCompleted\n                  ? _vm.doSearch()\n                  : (_vm.searchMenuModel = !_vm.searchMenuModel)},\"click:append\":function($event){_vm.searchAfterCompleted\n                  ? _vm.doSearch()\n                  : (_vm.searchMenuModel = !_vm.searchMenuModel)}},model:{value:(_vm.search),callback:function ($$v) {_vm.search=$$v},expression:\"search\"}})]}}],null,false,1212712761),model:{value:(_vm.searchMenuModel),callback:function ($$v) {_vm.searchMenuModel=$$v},expression:\"searchMenuModel\"}},[_c('v-toolbar',{attrs:{\"flat\":\"\"}},[_c('h2',{staticClass:\"d-flex justify-center\"},[_vm._v(\"Advanced Filter/Search\")])]),(_vm.hasAdvancedSearch)?_c('v-list',{key:_vm.searchModelKey,staticStyle:{\"max-height\":\"50vh\",\"overflow-y\":\"auto\"}},_vm._l((_vm.computedHeaders),function(h,i){return _c('v-list-item',{key:i},[_c('v-row',[_c('v-col',{staticClass:\"ma-2\"},[_c('label',[_vm._v(_vm._s(_vm.capitalize(h.value))+\":\")])]),_c('v-col',[_c('div',{staticStyle:{\"width\":\"300px\"}},[_c('v-form-component',{ref:h.value,refInFor:true,attrs:{\"name\":h.value,\"label\":h.text,\"schema\":_vm.getSchema({ name: h.value }),\"k\":h.value,\"model\":_vm.searchModel,\"hasParent\":_vm.hasParent}})],1)])],1)],1)}),1):_vm._e(),_c('v-toolbar',[_c('v-btn',{attrs:{\"text\":\"\"},on:{\"click\":function($event){return _vm.clearSearch()}}},[_vm._v(\"Clear Filter\")]),_c('v-spacer'),_c('v-menu',{attrs:{\"close-on-content-click\":false,\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n                  var on = ref.on;\nreturn [_c('v-btn',_vm._g({staticClass:\"ma-2\",attrs:{\"color\":\"info\"}},on),[_vm._v(\" Save Filter \")])]}}],null,false,645733370),model:{value:(_vm.saveFilterMenu),callback:function ($$v) {_vm.saveFilterMenu=$$v},expression:\"saveFilterMenu\"}},[_c('v-toolbar',[_c('v-text-field',{attrs:{\"label\":\"Filter Name\"},model:{value:(_vm.filterName),callback:function ($$v) {_vm.filterName=$$v},expression:\"filterName\"}}),_c('v-btn',{staticClass:\"ma-2\",attrs:{\"text\":\"\",\"color\":\"info\"},on:{\"click\":function($event){return _vm.saveFilter()}}},[_vm._v(\" Save Filter \")])],1)],1)],1)],1):_vm._e(),(_vm.hasAssistant)?_c('v-btn',{attrs:{\"text\":\"\"},on:{\"click\":_vm.buildCustomQueryPrompt}},[_c('v-icon',[_vm._v(\" mdi-database-search \")]),(_vm.$vuetify.breakpoint.mdAndUp)?_c('v-span',[_vm._v(\"Build Custom Search\")]):_vm._e()],1):_vm._e(),(_vm.hasAssistant && _vm.assistantQry)?_c('v-btn',{attrs:{\"text\":\"\"},on:{\"click\":_vm.resetAssistantQry}},[_c('v-icon',[_vm._v(\" mdi-close \")]),(_vm.$vuetify.breakpoint.mdAndUp)?_c('v-span',[_vm._v(\"Reset Custom Search\")]):_vm._e()],1):_vm._e(),_c('v-spacer'),(_vm.expandable)?_c('v-btn',{attrs:{\"text\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.expandAll()}}},[(!_vm.allTableExpanded)?_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-expand-all\")]):_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-collapse-all\")])],1):_vm._e(),(\n            !_vm.edited &&\n              (_vm.hasSearch ||\n                (_vm.filteredTabItems.length &&\n                  _vm.filteredTabItems.length > 1 &&\n                  !_vm.noTabs)) &&\n              !_vm.useTabs & !_vm.$root.isMobile &&\n              _vm.filteredTabItems.length &&\n              _vm.filteredTabItems.length > 1 &&\n              !_vm.noTabs\n          )?_c('v-autocomplete',{staticClass:\"mt-5 pa-2\",attrs:{\"clearable\":\"\",\"items\":_vm.filteredTabItems,\"item-text\":\"caption\",\"item-value\":\"value\",\"label\":_vm.filterComboLabel || 'Filter'},on:{\"change\":_vm.applyFilter,\"keydown\":_vm.applyFilterOnEnter}}):_vm._e(),(_vm.additionalModel && _vm.additionalModel.custom_qry)?_c('v-autocomplete',{staticClass:\"mt-5 pa-2\",attrs:{\"clearable\":\"\",\"items\":_vm.additionalModel.custom_qry,\"item-text\":\"caption\",\"item-value\":\"_id\",\"label\":\"Custom Query\"},on:{\"change\":_vm.applyCustomQry},scopedSlots:_vm._u([{key:\"item\",fn:function(ref){\n          var item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(item.caption)+\" \"),_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.deleteCustomQry(item, _vm.index)}}},[_c('v-icon',{attrs:{\"color\":\"red\"}},[_vm._v(\"mdi-delete\")])],1)]}}],null,false,531951680)}):_vm._e(),(\n            _vm.addMenuButton &&\n              !_vm.readonly &&\n              (!_vm.noAddOnAllTab || (_vm.noAddOnAllTab && _vm.currentFilter))\n          )?_c('v-menu-button',_vm._b({key:_vm.menuButtonKey,attrs:{\"title\":_vm.addButtonCaption,\"apply\":_vm.applyRow,\"reset\":_vm.resetNewRow,\"menuOpen\":_vm.menuOpen,\"icon\":\"mdi-plus-circle\",\"modal\":true,\"text\":true,\"color\":\"info\",\"menuItemClick\":_vm.addRowFromButton,\"hasSearch\":true,\"getItems\":_vm.getItems,\"menuItems\":_vm.menuItems,\"formModel\":_vm.formModel,\"editableFields\":_vm.getEditableFields(),\"table\":this,\"capitalizeText\":true}},'v-menu-button',_vm.getAddButton(),false)):_vm._e(),(_vm.tableInsertable && !_vm.addMenuButton)?_c('v-btn',_vm._g({staticClass:\"ma-1\",attrs:{\"text\":\"\",\"color\":\"info\"},on:{\"click\":function($event){return _vm.addRow()}}},_vm.on),[_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-plus-circle\")]),_c('div',[_vm._v(_vm._s(_vm.addButtonCaption || \"Add Record\"))])],1):_vm._e(),(\n            _vm.tableInsertable &&\n              !_vm.edited &&\n              !_vm.readonly &&\n              _vm.table.length &&\n              _vm.table[0]._id == _vm.newRowId\n          )?_c('v-toolbar',{staticClass:\"table-toolbar\",attrs:{\"flat\":\"\"}},[(_vm.table.length && _vm.table[0]._id == _vm.newRowId)?_c('v-btn',{staticClass:\"ma-1\",attrs:{\"icon\":\"\"}},[_c('v-icon',{attrs:{\"color\":\"success\"},on:{\"click\":function($event){return _vm.applyRow()}}},[_vm._v(\" mdi-checkbox-marked-circle \")])],1):_vm._e(),(_vm.table.length && _vm.table[0]._id == _vm.newRowId)?_c('v-btn',{staticClass:\"ma-1\",attrs:{\"icon\":\"\",\"color\":\"warning\"}},[_c('v-icon',{on:{\"click\":function($event){return _vm.resetNewRow()}}},[_vm._v(\"mdi-cancel\")])],1):_vm._e()],1):_vm._e(),_c('v-spacer'),(_vm.showAdvancedSearch)?_c('v-btn',{staticClass:\"ma-1\",attrs:{\"small\":\"\",\"text\":\"\"},on:{\"click\":function($event){_vm.showAdvancedSearch = !_vm.showAdvancedSearch}}},[_c('v-icon',{attrs:{\"color\":\"info\"}},[_vm._v(\"mdi-filter-remove\")])],1):_vm._e(),_c('v-spacer'),(_vm.xllink)?_c('a',{attrs:{\"target\":\"_blank\",\"href\":_vm.xllink}},[_vm._v(\"Download Excel\")]):_vm._e(),(\n            !_vm.$root.isMobile &&\n              !_vm.edited &&\n              !_vm.dExcel &&\n              _vm.toolBarControls &&\n              !_vm.hideControls &&\n              !_vm.noToolBar &&\n              _vm.tableReady &&\n              !_vm.readonly\n          )?_c('v-toolbar',{key:_vm.toolBarKey,staticClass:\"table-toolbar\",attrs:{\"flat\":\"\"}},[(_vm.toolbarRight && _vm.$vuetify.breakpoint.mdAndUp)?_c('v-spacer'):_vm._e(),_vm._l(((_vm.safeToolBarControls || []).filter(function (t) {\n              return _vm.$root.customerId\n                ? t['v-bind'] && !t['v-bind'].noCustomer\n                : !t.hidden;\n            })),function(c,i){return _c('v-list-item',{key:i},[(\n                c.default &&\n                  !_vm.$root.isMobile &&\n                  !_vm.$root.isTablet &&\n                  c['v-bind'] &&\n                  c[\"comp\"] == 'v-btn' &&\n                  !c['v-bind'].hidden &&\n                  !c.hidden &&\n                  !_vm.hideCtl(c)\n              )?_c('v-btn',{class:c['v-bind'].class,attrs:{\"small\":true,\"color\":c['v-bind'].color,\"text\":c['v-bind'].text,\"loading\":_vm.customBtnLoading},on:{\"click\":function($event){return _vm.customBtnClick(c)}}},[(c['v-bind'] && c['v-bind'].icon)?_c('v-icon',{class:_vm.$vuetify.breakpoint.smAndDown ? 'ma-0' : 'ma-2'},[_vm._v(\" \"+_vm._s(c[\"v-bind\"].icon)+\" \")]):_vm._e(),_vm._v(\" \"+_vm._s(c[\"v-bind\"][\"input-value\"])+\" \")],1):(\n                c.default &&\n                  !_vm.edited &&\n                  c['v-bind'] &&\n                  !c['v-bind'].hidden &&\n                  !_vm.hideCtl(c)\n              )?_c(c[\"comp\"],_vm._b({ref:c[\"id\"],refInFor:true,tag:\"component\",style:('width:' + c[\"v-bind\"].width),attrs:{\"hidden\":c.hidden,\"small\":\"\",\"id\":c[\"id\"],\"table\":_vm.getObject()}},'component',c[\"v-bind\"],false),[_vm._v(\" \"+_vm._s(c.value)+\" \")]):_vm._e()],1)})],2):_vm._e(),(!_vm.noRefreshButton && _vm.getFreshData && !_vm.edited && _vm.tableReady)?_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n              var on = ref.on;\nreturn [_c('v-btn',_vm._g({staticClass:\"ma-1\",attrs:{\"small\":\"\",\"text\":\"\"},on:{\"click\":function($event){_vm.refreshParent ? _vm.refreshParent() : _vm.refreshTable()}}},on),[_c('v-icon',{class:_vm.$vuetify.breakpoint.smAndDown ? 'ma-0' : 'ma-2'},[_vm._v(\" mdi-reload \")])],1)]}}],null,false,3611342554)},[_c('span',[_vm._v(\"Refresh\")])]):_vm._e(),(!_vm.$root.isMobile)?_c('v-spacer'):_vm._e(),(\n            !_vm.$root.isMobile &&\n              !_vm.edited &&\n              _vm.tableReady &&\n              !_vm.hideFooter &&\n              !_vm.editDisablePagination &&\n              !_vm.disablePagination\n          )?_c('v-pager',{key:_vm.pagerKey,attrs:{\"pageStart\":_vm.pageStart,\"pageStop\":_vm.itemsCount > _vm.pageStop ? _vm.pageStop : _vm.itemsCount,\"itemsLength\":_vm.itemsCount,\"navigate\":_vm.navigate,\"page\":_vm.page}}):_vm._e(),(!_vm.edited && !_vm.noAdditionalMenu)?_c('v-menu',{attrs:{\"close-on-content-click\":false,\"close-on-click\":_vm.closeMenuOnClick},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n          var on = ref.on;\n          var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ma-1\",attrs:{\"icon\":\"\",\"small\":\"\"}},'v-btn',attrs,false),on),[_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-dots-vertical\")])],1)]}}],null,false,1541385946),model:{value:(_vm.menuModel),callback:function ($$v) {_vm.menuModel=$$v},expression:\"menuModel\"}},[_c('v-toolbar',{staticClass:\"mb-n2\",attrs:{\"flat\":\"\"}},[_c('v-spacer'),_c('v-btnright',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){_vm.menuModel = false}}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-close\")])],1)],1),_c('v-list',{staticClass:\"mt-n4\"},[(_vm.groupByItemsReady)?_c('v-list-item',[_c('v-autocomplete',{attrs:{\"label\":\"Group By\",\"clearable\":true,\"items\":_vm.captializedGroupByItems()},on:{\"change\":_vm.applyGroupBy}})],1):_vm._e(),(_vm.dExcel)?_c('v-list-item',[_c('v-btn',_vm._g({attrs:{\"icon\":\"\",\"right\":\"\"},on:{\"click\":_vm.submit}},_vm.on),[_c('v-icon',[_vm._v(\"mdi-content-save\")]),_vm._v(\" Save Table \")],1)],1):_vm._e(),_c('v-list-item',[_c('v-btn',{attrs:{\"loading\":_vm.loading,\"text\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.downloadExcel()}}},[_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-file-excel\")]),_vm._v(\" Download Excel \")],1)],1),(_vm.hasUpload && _vm.tableReady)?_c('v-list-item',[_c('v-btn',_vm._g({attrs:{\"loading\":_vm.loading,\"text\":\"\",\"small\":\"\"},on:{\"click\":function($event){return _vm.uploadExcel()}}},_vm.on),[_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-auto-upload\")]),_vm._v(\" Upload Excel \")],1)],1):_vm._e(),(_vm.$vuetify.breakpoint.smAndDown)?_c('v-list-item',[_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\"},on:{\"click\":function($event){return _vm.toggleBreakpoint()}}},[(_vm.breakpoint && _vm.breakpoint != '0')?_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\" mdi-table-large \")]):_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-view-list\")]),_vm._v(\" \"+_vm._s(_vm.breakpoint ? \"View Table\" : \"View List\")+\" \")],1)],1):_vm._e(),(_vm.tableReady && !_vm.hideFooter && _vm.table.length > 10)?_c('v-list-item',[_c('v-btn',_vm._g({attrs:{\"text\":\"\",\"small\":\"\"},on:{\"click\":function($event){_vm.editDisablePagination = !_vm.editDisablePagination}}},_vm.on),[_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-select-all\")]),_vm._v(\" \"+_vm._s(_vm.editDisablePagination ? \"Enable Pagination\" : \"Disable Pagination\")+\" \")],1)],1):_vm._e(),(_vm.columnTool && _vm.tableReady && !_vm.$root.customerId)?_c('v-list-item',[(_vm.columnTool && _vm.tableReady && !_vm.$root.customerId)?_c('v-menu',{attrs:{\"close-on-content-click\":false,\"offset-y\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n          var onMenu = ref.on;\n          var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({attrs:{\"small\":\"\",\"text\":\"\"}},'v-btn',attrs,false),Object.assign({}, onMenu)),[_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-view-column\")]),_vm._v(\" Choose Columns \")],1)]}}],null,false,773248854)},[_c('v-list',{staticClass:\"column-list\"},[_c('draggable',{staticStyle:{\"width\":\"100%\"},attrs:{\"list\":_vm.computedHeaders}},_vm._l(((_vm.computedHeaders || []).filter(\n                        function (c) {\n                          return c.value != 'actions';\n                        }\n                      )),function(item,index){return _c('v-list-item',{key:index,staticClass:\"pointer\"},[_c('v-list-item-title',[_vm._v(_vm._s(item.text))]),_c('v-switch',{model:{value:(item.show),callback:function ($$v) {_vm.$set(item, \"show\", $$v)},expression:\"item.show\"}})],1)}),1)],1),_c('v-toolbar',[_c('v-btn',{staticStyle:{},attrs:{\"text\":\"\",\"color\":\"info\"},on:{\"click\":function($event){return _vm.saveColumns()}}},[_vm._v(\" Save Columns \")]),_c('v-btn',{staticStyle:{},attrs:{\"text\":\"\",\"color\":\"warning\"},on:{\"click\":function($event){return _vm.resetColumns()}}},[_vm._v(\" Reset Columns \")])],1)],1):_vm._e()],1):_vm._e(),_c('hr'),_vm._l(((_vm.safeToolBarControls || []).filter(function (t) {\n                return (\n                  (!t.default || _vm.$root.isMobile || _vm.$root.isTablet) &&\n                  (_vm.$root.customerId\n                    ? t['v-bind'] && !t['v-bind'].noCustomer\n                    : !t.hidden)\n                );\n              })),function(c,i){return _c('v-list-item',{key:i},[(\n                  (!c.default || _vm.$root.isMobile || _vm.$root.isTablet) &&\n                    c[\"comp\"] == 'v-btn' &&\n                    c['v-bind'] &&\n                    !c['v-bind'].hidden &&\n                    !c.hidden &&\n                    !_vm.hideCtl(c)\n                )?_c('v-btn',{class:c['v-bind'].class,attrs:{\"small\":true,\"color\":c['v-bind'].color,\"text\":c['v-bind'].text,\"loading\":_vm.customBtnLoading},on:{\"click\":function($event){return _vm.customBtnClick(c)}}},[(c['v-bind'] && c['v-bind'].icon)?_c('v-icon',{class:_vm.$vuetify.breakpoint.smAndDown ? 'ma-2' : 'ma-2'},[_vm._v(\" \"+_vm._s(c[\"v-bind\"].icon)+\" \")]):_vm._e(),_vm._v(\" \"+_vm._s(c[\"v-bind\"][\"input-value\"])+\" \")],1):(\n                  !c.default &&\n                    !_vm.edited &&\n                    c['v-bind'] &&\n                    !c['v-bind'].hidden &&\n                    !_vm.hideCtl(c)\n                )?_c(c[\"comp\"],_vm._b({ref:c[\"id\"],refInFor:true,tag:\"component\",attrs:{\"hidden\":c.hidden,\"small\":\"\",\"id\":c[\"id\"],\"table\":_vm.getObject()}},'component',c[\"v-bind\"],false),[_vm._v(\" \"+_vm._s(c.value)+\" \")]):_vm._e()],1)})],2)],1):_vm._e(),_c('div',{staticClass:\"text-center\"},[(_vm.helpText)?_c('v-dialog',{attrs:{\"width\":\"500\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n                var on = ref.on;\n                var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({staticClass:\"ma-1\",attrs:{\"icon\":\"\",\"small\":\"\"}},'v-btn',attrs,false),on),[_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-help-box\")])],1)]}}],null,false,1154043008),model:{value:(_vm.helpModel),callback:function ($$v) {_vm.helpModel=$$v},expression:\"helpModel\"}},[_c('v-card',[_c('v-card-title',{staticClass:\"text-h5 grey lighten-2\"},[_vm._v(\" \"+_vm._s(_vm.helpTitle)+\" \")]),_c('v-card-text',[_vm._v(\" \"+_vm._s(_vm.helpText)+\" \")])],1)],1):_vm._e()],1),void 0,(!_vm.isMobile && !_vm.noFullScreen)?_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n                var on = ref.on;\nreturn [_c('v-btn',_vm._g({staticClass:\"ma-2\",attrs:{\"icon\":\"\"},on:{\"click\":_vm.toggleFullScreen}},on),[(!_vm.isFullScreen)?_c('v-icon',[_vm._v(\"mdi-fullscreen\")]):_c('v-icon',{attrs:{\"round\":\"\",\"color\":\"error\"}},[_vm._v(\"mdi-fullscreen-exit\")])],1)]}}],null,false,1699007566)},[_c('span',[_vm._v(\"Toggle Full Screen\")])]):_vm._e()],2):_vm._e()],1),(_vm.upload)?_c('div',[_c('v-upload',{attrs:{\"defaultMessage\":\"Drop here excel file to upload\",\"label\":_vm.uploadFieldsTitle,\"objectName\":_vm.data_object.object_name,\"uploadFields\":_vm.uploadFields}})],1):_vm._e(),(_vm.isEditedNew && _vm.edited)?_c('h3',{staticClass:\"ma-2\"},[_vm._v(\" \"+_vm._s(_vm.addButtonCaption ? _vm.addButtonCaption.replace(\"Add\", \"New\") : \"New Record\")+\" \")]):_vm._e(),(_vm.editedTabs.length)?_c('v-tabs',{key:_vm.editedTabsKey,staticClass:\"mt-2\",attrs:{\"hidden\":_vm.hideEditedTabs || _vm.isEditedNew,\"show-arrows\":\"\",\"grow\":\"\"},model:{value:(_vm.edited),callback:function ($$v) {_vm.edited=$$v},expression:\"edited\"}},[_c('v-tab',{key:\"all_records\"},[_vm._v(\"All \"+_vm._s(_vm.tableName))]),_vm._l((_vm.editedTabs),function(t,i){return _c('v-tab',{key:i,on:{\"click\":function($event){return _vm.getCurrentEditedItem(t)}}},[(t.icon)?_c('v-icon',{staticClass:\"pr-2\"},[_vm._v(_vm._s(t.icon))]):_vm._e(),_vm._v(\" \"+_vm._s(t.text)+\" \"),_c('v-btn',{staticClass:\"ml-2\",attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.removeTab(i)}}},[_c('v-icon',{attrs:{\"x-small\":\"\"}},[_vm._v(\"mdi-close\")])],1)],1)})],2):_vm._e(),(_vm.edited)?_c('div',{staticClass:\"edited-form\"},[_c('div',{tag:\"v-component\",attrs:{\"fullscreen\":\"\"},model:{value:(_vm.dialog),callback:function ($$v) {_vm.dialog=$$v},expression:\"dialog\"}},[_c('v-form-card',_vm._b({key:_vm.formKey,ref:\"form\",attrs:{\"dObject\":_vm.dObject,\"inTable\":true,\"panels\":true,\"noCache\":_vm.noCache,\"hasParent\":_vm.hasParent}},'v-form-card',_vm.schema['v-bind'],false))],1),_c('v-toolbar',{attrs:{\"flat\":\"\"}},[_c('v-spacer'),(!_vm.childEdited && _vm.edited)?_c('div',{staticClass:\"edit-bar\",attrs:{\"flat\":\"\"}},[_c('v-spacer'),_c('v-btn',{attrs:{\"text\":\"\"},on:{\"click\":_vm.cancelEdit}},[_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-cancel\")]),_c('span',[_vm._v(\"Cancel Edit\")])],1),(!_vm.disableSave)?_c('v-btn',{staticClass:\"text-right ma-2\",attrs:{\"text\":\"\",\"right\":\"\",\"color\":\"success\"},on:{\"click\":function($event){return _vm.validateAndSave()}}},[_c('v-icon',{staticClass:\"ma-2\"},[_vm._v(\"mdi-check\")]),_c('span',[_vm._v(\" \"+_vm._s(_vm.saveButtonCaption || \"Save\"))])],1):_vm._e(),(_vm.copyRecords)?_c('v-menu',{attrs:{\"close-on-content-click\":false,\"nudge-width\":200,\"offset-x\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n                var on = ref.on;\n                var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g({attrs:{\"text\":\"\",\"small\":\"\"}},on),[_c('v-icon',[_vm._v(\"mdi-content-copy\")]),_vm._v(\" Duplicate \")],1)]}}],null,false,3572175814),model:{value:(_vm.copyMenu),callback:function ($$v) {_vm.copyMenu=$$v},expression:\"copyMenu\"}},[_c('v-card',{staticClass:\"pa-2\"},[_c('h3',[_vm._v(\"Copy \"+_vm._s(_vm.dObject.model[_vm.copyRecords.field_name]))]),_c('br'),_c('v-label',[_vm._v(\" New \"+_vm._s(_vm.copyRecords.field_name)+\" separated by comma: \")]),_c('v-textarea',{model:{value:(_vm.duplicateValues),callback:function ($$v) {_vm.duplicateValues=$$v},expression:\"duplicateValues\"}}),_c('v-btn',{attrs:{\"color\":\"info\"},on:{\"click\":function($event){return _vm.duplicate()}}},[_vm._v(\"Submit\")])],1)],1):_vm._e(),(_vm.errorMessage != '' && _vm.errorMessage)?_c('v-alert',{attrs:{\"dismissible\":\"\",\"dense\":\"\",\"type\":\"error\"}},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e()],1):_vm._e()],1)],1):_c('div',{ref:\"tableWrap\",class:_vm.hideScroll\n          ? ''\n          : _vm.$root.isMobile\n          ? ''\n          : _vm.noHorizontalScroll\n          ? 'data-table-wrap-no-hor'\n          : 'data-table-wrap',style:({ height: _vm.wrapHeight, 'max-height': _vm.wrapHeight })},[(!_vm.hideScroll)?_c('div',{ref:\"outerScroll\",staticClass:\"outer-scroll\"},[_c('div',{staticClass:\"inner-scroll\",attrs:{\"refs\":\"innerScroll\"}})]):_vm._e(),(\n          !_vm.dList &&\n            !_vm.dExcel &&\n            Array.isArray(_vm.table) &&\n            !_vm.mapDialog &&\n            _vm.tableReady &&\n            _vm.computedHeaders\n        )?_c('v-data-table',{directives:[{name:\"draggable\",rawName:\"v-draggable\"}],key:_vm.tableKey,ref:\"dTable\",staticClass:\"row-pointer elevation-1\",style:(_vm.tblStyle),attrs:{\"items\":_vm.filteredItems,\"headers\":(_vm.computedHeaders || []).filter(function (h) {\n            return (\n              _vm.table.length &&\n              !h.hide &&\n              (h.show || h.value == 'actions' || _vm.tableEditRow)\n            );\n          }),\"group-by\":_vm.groupBy,\"group-key\":_vm.groupBy,\"group-desc\":false,\"item-key\":\"_id\",\"show-select\":(!_vm.noDelete && _vm.selectDelete) ||\n            _vm.singleSelect ||\n            _vm.select ||\n            _vm.isDraggable ||\n            _vm.selectSwitch,\"show-expand\":_vm.expandable,\"show-group-by\":_vm.showGroupBy,\"fixed-header\":_vm.fixedHeader,\"height\":_vm.tableHeight,\"disable-pagination\":_vm.editDisablePagination,\"hide-default-footer\":true,\"hide-default-header\":_vm.hideHeader,\"items-per-page\":_vm.itemsPerPageEdited,\"mobile-breakpoint\":_vm.breakpoint,\"options\":_vm.pagination,\"dense\":\"\",\"expand\":_vm.expand,\"expanded\":_vm.expanded,\"transition\":\"slide-y-transition\",\"page\":_vm.page,\"loading\":_vm.loading,\"search\":_vm.searchLen ? _vm.searchTrigger : _vm.search,\"item-class\":_vm.itemClass,\"disable-sort\":_vm.disableSort,\"single-select\":(_vm.singleSelect && !_vm.selectDelete) || (_vm.noDelete && !_vm.select),\"server-items-length\":_vm.serverItemsLength,\"custom-sort\":_vm.customSorting,\"custom-filter\":_vm.customFilter ? _vm.customFiltering : _vm.defaultFilter,\"tableName\":_vm.tableName},on:{\"click:row\":_vm.handleClick,\"pagination\":_vm.onPagination,\"item-selected\":function($event){_vm.itemSelected || null},\"update:options\":function($event){_vm.pagination=$event},\"update:expand\":function($event){_vm.expand=$event},\"update:expanded\":function($event){_vm.expanded=$event},\"sorted\":_vm.saveOrder,\"update:page\":function($event){_vm.page=$event},\"update:sort-by\":_vm.getSortBy,\"update:sort-desc\":_vm.getSortDesc,\"update:group-by\":_vm.getGroupBy,\"update:group-desc\":_vm.handleGroupDescChange},scopedSlots:_vm._u([(_vm.isGoToButton)?{key:\"item.goto\",fn:function(ref){\n            var item = ref.item;\nreturn [_c('v-btn',{attrs:{\"small\":\"\",\"elevation\":\"0\"},on:{\"click\":function($event){return _vm.goToButtonAction(item)}}},[_vm._v(\" \"+_vm._s(_vm.goToButtonText)+\" \")])]}}:null,{key:\"body.prepend\",fn:function(){return [(_vm.showAdvancedSearch)?_c('tr',_vm._l((_vm.computedHeaders),function(h,i){return _c('td',{key:i,staticStyle:{\"min-width\":\"150px\",\"padding\":\"0px\"}},[_c('v-form-component',{ref:h.value,refInFor:true,attrs:{\"name\":h.value,\"schema\":_vm.getSchema({ name: h.value }),\"k\":h.value,\"model\":_vm.searchModel,\"hasParent\":_vm.hasParent}})],1)}),0):_vm._e()]},proxy:true},{key:\"top\",fn:function(){return [(_vm.$root.isMobile)?_c('div',{staticClass:\"custom-sort-control mb-n10 mt-n6 pl-4 pt-4\"},[(\n                _vm.filteredTabItems.length &&\n                  _vm.filteredTabItems.length > 1 &&\n                  !_vm.noTabs &&\n                  _vm.$root.isMobile\n              )?_c('v-select',{staticClass:\"mb-1 mr-1 mt-2\",attrs:{\"clearable\":\"\",\"items\":_vm.filteredTabItems,\"item-text\":\"caption\",\"item-value\":\"value\",\"outlined\":false,\"filled\":\"\",\"label\":_vm.filterComboLabel || 'Filter'},on:{\"change\":_vm.applyFilter}}):_vm._e()],1):_vm._e()]},proxy:true},{key:\"header\",fn:function(props){return (\n            props.props.headers.some(function (h) {\n              return h['v-bind'] && h['v-bind'].span && !h['v-bind'].noSpan;\n            })\n          )?[_vm._l(((props.props.headers || []).filter(function (r) {\n              return !r['v-bind'] && !r.value == 'actions';\n            })),function(h,i){return _c('td',{key:i},[_vm._v(\" \"+_vm._s(h.text)+\" \")])}),_vm._l(((props.props.headers || []).filter(function (r) {\n              return r['v-bind'] && r['v-bind'].span;\n            })),function(h,i){return _c('td',{key:i,attrs:{\"colspan\":h['v-bind'] ? h['v-bind'].span.headers.length : 1}},[(h['v-bind'])?_c('v-row',{staticClass:\"ma-2 pr-12\"},_vm._l((h['v-bind'].span.headers),function(s,j){return _c('v-col',{key:j},[_c('span',{class:'ml-n' + j * 6},[_vm._v(_vm._s(s))])])}),1):_vm._e()],1)})]:undefined}},{key:\"group.header\",fn:function(props){return [_c('td',{attrs:{\"colspan\":props.headers.length}},[_c('v-btn',{ref:\"group\",staticClass:\"ma-2\",attrs:{\"small\":\"\",\"text\":\"\",\"data-open\":props.isOpen},on:{\"click\":props.toggle}},[(props.isOpen)?_c('v-icon',{ref:'openGroup_' + props.group},[_vm._v(\" mdi-chevron-up \")]):_c('v-icon',{ref:'closeGroup_' + props.group},[_vm._v(\" mdi-chevron-down \")]),_c('h4',[_vm._v(\" \"+_vm._s(_vm.capitalize(_vm.getGroupName(props)))+\" \")])],1),_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n            var on = ref.on;\n            var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._g(_vm._b({ref:\"removeGroup\",attrs:{\"small\":\"\",\"text\":\"\"},on:{\"click\":props.remove}},'v-btn',attrs,false),on),[_c('v-icon',[_vm._v(\"mdi-close\")])],1)]}}],null,true)},[_vm._v(\" Ungroup \")])],1)]}},{key:\"item.data-table-select\",fn:function(item){return [(\n              (_vm.selectDelete && !_vm.noDelete) ||\n                _vm.select ||\n                _vm.singleSelect ||\n                _vm.selectSwitch\n            )?_c('td',{staticStyle:{\"max-width\":\"25px\",\"overflow\":\"hidden\"}},[(\n                (!_vm.droppedObjects || !_vm.sortedDraggedObjects(item).length) &&\n                  ((item.item._id && !_vm.disabledProperty) ||\n                    (_vm.disabledValue &&\n                      item.item[_vm.disabledProperty] !== _vm.disabledValue) ||\n                    (!_vm.disabledValue && !item.item[_vm.disabledProperty]))\n              )?_c('v-checkbox',{staticClass:\"mt-0 mb-n4\",on:{\"change\":function($event){_vm.log(item);\n                item.select($event);}},model:{value:(item.isSelected),callback:function ($$v) {_vm.$set(item, \"isSelected\", $$v)},expression:\"item.isSelected\"}}):_vm._e()],1):_vm._e(),(_vm.isDraggable)?_c('td',[_c('v-tooltip',{attrs:{\"right\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n                var on = ref.on;\nreturn [_c('v-icon',_vm._g({staticClass:\"drag-handle\"},on),[_vm._v(\"mdi-drag\")])]}}],null,true)},[_c('span',[_vm._v(\"Drag to reorder\")])])],1):_vm._e(),(_vm.rowIcons)?_c('td',_vm._l((_vm.rowIcons(item)),function(i,j){return _c('span',{key:j},[_c('v-icon',{attrs:{\"color\":i.color}},[_vm._v(_vm._s(i.icon))]),_vm._v(\" \"+_vm._s(i.title)+\" \")],1)}),0):_vm._e()]}},_vm._l((_vm.capitalizable),function(field,i){return {key:[\"item.\" + field],fn:function(props){return [(\n              _vm.schema.properties[field] && _vm.schema.properties[field].template\n            )?_c('div',{key:i,domProps:{\"innerHTML\":_vm._s(_vm.getTemplate(props.item, { name: field }))}}):(props.item[field] && _vm.schema.properties[field])?_c('div',{key:field},[_vm._v(\" \"+_vm._s(props.item[field] && _vm.schema.properties[field][\"v-bind\"] ? _vm.schema.properties[field][\"v-bind\"] && _vm.schema.properties[field][\"v-bind\"].returnObject ? _vm.schema.properties[field][\"v-bind\"] ? props.item[field][ _vm.schema.properties[field][\"v-bind\"].itemText ] : _vm.capitalize(props.item[field].toString()) : \"\" : \"\")+\" \")]):_vm._e()]}}}),_vm._l((_vm.specialFields),function(slot,i){return {key:(\"item.\" + (slot.model)),fn:function(ref){\n            var item = ref.item;\nreturn [(item[slot.model] && _vm.dialogFields)?_c('v-text-dialog',{key:i,attrs:{\"vModel\":item[slot.model],\"width\":slot.width,\"icon\":_vm.getTextDialogIcon(slot, item)}}):_vm._e(),(item[slot.model] && !_vm.dialogFields)?_c('v-alert',{key:i,staticClass:\"ma-2\",attrs:{\"dense\":\"\",\"text\":\"\",\"color\":_vm.$vuetify.theme.dark\n                ? _vm.invertColor(\n                    _vm.getItemColor(\n                      item[slot.model],\n                      slot.model,\n                      item,\n                      _vm.tableName\n                    )\n                  )\n                : _vm.getItemColor(item[slot.model], slot.model, item, _vm.tableName)}},[_c('span',{staticStyle:{\"white-space\":\"nowrap\"}},[_vm._v(\" \"+_vm._s(_vm.getChipValue(item, slot.model))+\" \")])]):_vm._e()]}}}),_vm._l((_vm.editable),function(field,i){return {key:[\"item.\" + field.name],fn:function(props){return [(\n              !_vm.editRow &&\n                ((props.item._id != _vm.newRowId &&\n                  !_vm.readonly &&\n                  !field.directEdit &&\n                  _vm.editedItem &&\n                  props.item._id &&\n                  props.item._id != _vm.newRowId) ||\n                  (!_vm.editedItem &&\n                    !_vm.readonly &&\n                    !field.nonUpdatable &&\n                    !field.directEdit &&\n                    props.item._id != _vm.newRowId))\n            )?_c('v-edit-dialog',{key:field.name + i,ref:field.name + props.item._id,refInFor:true,attrs:{\"save-text\":\"apply\"},on:{\"cancel\":_vm.cancel,\"open\":function($event){return _vm.open(field, props)},\"close\":_vm.close,\"save\":function($event){return _vm.emitDialogSave(props.item, field.name)}},scopedSlots:_vm._u([{key:\"input\",fn:function(){return [_c('v-form-component',{ref:field.name,refInFor:true,attrs:{\"name\":field.name,\"model\":props.item,\"parentModel\":props.item,\"parModel\":_vm.formModel,\"schema\":_vm.getSchema(field, props.item),\"parentSchema\":_vm.parObject || {},\"parentSchemaObject\":_vm.getParentSchema(),\"inLine\":true,\"k\":field.name,\"defaultDataFn\":_vm.defaultDataFn,\"placeholder\":_vm.schema.properties[field.name].title,\"click\":_vm.selectCtl,\"onValueChange\":_vm.onValueChange,\"autofocus\":true,\"dialogOpen\":true,\"hasParent\":_vm.hasParent,\"noCache\":_vm.noCache}}),(_vm.showComponent(field.name, props.item))?_c('v-toolbar',{attrs:{\"flat\":\"\"}},[_c('v-spacer'),(!_vm.schema.properties[field.name].noEditDialogButtons)?_c('v-btn',{attrs:{\"small\":\"\",\"text\":\"\",\"color\":\"info\"},on:{\"click\":function($event){return _vm.emitDialogSave(props.item, field.name)}}},[_vm._v(\" \"+_vm._s(_vm.getSaveTitle(field.name))+\" \")]):_vm._e(),_c('v-btn',{ref:\"cancelBtn\",refInFor:true,attrs:{\"small\":\"\",\"text\":\"\"},on:{\"click\":function($event){return _vm.closeDialog(field.name + props.item._id)}}},[_vm._v(\" Close \")])],1):_vm._e()]},proxy:true}],null,true),model:{value:(_vm.dialogModel),callback:function ($$v) {_vm.dialogModel=$$v},expression:\"dialogModel\"}},[(\n                _vm.schema.properties && _vm.getColor(props, field) == 'underscore'\n              )?_c('div',{class:_vm.$vuetify.breakpoint.smAndDown ? '' : _vm.getColor(props, field),domProps:{\"innerHTML\":_vm._s(_vm.getField(props, field))}}):_c('v-chip',{attrs:{\"color\":_vm.getColor(props, field).replace(' editable', '')}},[_c('div',{staticClass:\"chip-text\"},[_vm._v(\" \"+_vm._s(_vm.getField(props, field) || \"\")+\" \")])])],1):_vm._e(),(\n              (_vm.editRow && !field.hideTitle) ||\n                (_vm.readonly &&\n                  _vm.schema.properties &&\n                  _vm.getColor(props, field) == 'underscore')\n            )?_c('div',{key:field.name + i,class:_vm.$vuetify.breakpoint.smAndDown\n                ? ''\n                : _vm.editRow\n                ? ''\n                : _vm.getColor(props, field),domProps:{\"innerHTML\":_vm._s(_vm.getField(props, field))}}):_vm._e(),_c('div',{key:i,class:_vm.$vuetify.breakpoint.mdAndUp ? 'mb-2 ml-n6' : 'mb-3 ml-2',style:(_vm.$vuetify.breakpoint.mdAndUp && _vm.getSchema(field)[field.name]\n                ? 'width:' + _vm.getSchema(field)[field.name].width + 'px'\n                : '')},[(\n                _vm.disabledProperty &&\n                  props.item[_vm.disabledProperty] == _vm.disabledValue &&\n                  field.name == _vm.disabledProperty\n              )?_c('div',{staticStyle:{\"width\":\"100px\"}},[_vm._v(\" \"+_vm._s(_vm.capitalize(props.item[_vm.disabledProperty]))+\" \")]):_vm._e(),(\n                _vm.schema.properties[field.name] &&\n                  _vm.schema.properties[field.name].template &&\n                  !_vm.editable.includes(field)\n              )?_c('div',{staticClass:\"mb-n7 mt-n2 pa-0\"},[_vm._v(\" \"+_vm._s(_vm.getTemplate(props.item, field))+\" \")]):_vm._e(),_c('div',{class:_vm.$vuetify.breakpoint.mdAndUp ? '' : ''},[(\n                  _vm.schema.properties[field.name] &&\n                    ((_vm.schema.properties[field.name] &&\n                      !_vm.schema.properties[field.name].template &&\n                      props.item._id != _vm.newRowId &&\n                      !_vm.schema.properties[field.name].NoFirstRowEditable &&\n                      _vm.directEdit &&\n                      field.directEdit != false &&\n                      (props.item._id || _vm.tableInsertable) &&\n                      ((!_vm.disabledProperty && _vm.schema.properties[field.name]) ||\n                        props.item[_vm.disabledProperty] != _vm.disabledValue)) ||\n                      (props.item._id == _vm.newRowId &&\n                        !_vm.schema.properties[field.name].NoFirstRowEditable &&\n                        _vm.tableInsertable &&\n                        !field.directEdit) ||\n                      (!_vm.directEdit && field.directEdit == true))\n                )?_c('v-form-component',{ref:field.name,refInFor:true,staticClass:\"mb-n8 mt-n2 pa-0 ml-6\",attrs:{\"mainTab\":_vm.formMainTab,\"name\":field.name,\"model\":props.item,\"parentModel\":props.item,\"parModel\":_vm.formModel,\"schema\":_vm.getSchema(field, props.item),\"parentSchema\":_vm.parObject || {},\"parentSchemaObject\":_vm.getParentSchema(),\"inLine\":true,\"k\":field.name,\"inserted\":_vm.tableInsertable,\"compclass\":'mb-n4 mt-n2 pa-0',\"placeholder\":_vm.schema.properties[field.name].title,\"click\":_vm.selectCtl,\"defaultDataFn\":_vm.defaultDataFn,\"onValueChange\":_vm.onValueChange,\"hasParent\":_vm.hasParent}}):_vm._e()],1)])]}}}),{key:[\"item.\" + _vm.link.field],fn:function(props){return (_vm.link && _vm.link.field)?[_c('router-link',{attrs:{\"to\":{\n              name: _vm.link.name + '_' + props.item[_vm.link.field],\n              params: { id: props.item[_vm.link.field] }\n            }}},[_c('div',{on:{\"click\":function($event){_vm.linkClick ? _vm.linkClick(props.item) : _vm.myLinkClick(props.item)}}},[_vm._v(\" \"+_vm._s(props.item[_vm.link.field])+\" \")])])]:undefined}},{key:\"item.actions\",fn:function(props){return (_vm.tableEditRow || _vm.actionCommand)?[_c('v-toolbar',{staticStyle:{\"background-color\":\"transparent\"},attrs:{\"flat\":\"\"}},[_c('v-spacer'),(_vm.tableEditRow)?_c('v-btn',{attrs:{\"icon\":\"\"},on:{\"click\":function($event){return _vm.editCurrentRecord(props.item)}}},[_c('v-icon',[_vm._v(\"mdi-pencil\")])],1):_vm._e(),_vm._l((_vm.editControls),function(c,i){return _c(c[\"comp\"],_vm._b({key:i,ref:c[\"id\"],refInFor:true,tag:\"component\",staticClass:\"ml-0\",attrs:{\"small\":\"\",\"id\":c[\"id\"],\"formModel\":props.item}},'component',c[\"v-bind\"],false))}),_vm._l((_vm.actionCommand),function(c,i){return _c('v-tooltip',{key:i,attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n            var on = ref.on;\nreturn [_c('v-badge',{staticClass:\"custom-badge-position\",attrs:{\"bordered\":\"\",\"content\":props.item[c.badge],\"value\":props.item[c.badge] ? true : false,\"color\":\"error\",\"overlap\":\"\"}},[_c('v-btn',_vm._g({attrs:{\"color\":c.color,\"icon\":\"\"},on:{\"click\":function($event){c.action\n                        ? c.action(props.item)\n                        : _vm.customAction(props.item, c.actionName)}}},on),[(c.icon)?_c('v-icon',[_vm._v(_vm._s(c.icon))]):_vm._e(),(c.commandText)?_c('div',[_vm._v(\" \"+_vm._s(c.commandText(props.item))+\" \")]):_vm._e()],1)],1)]}}],null,true)},[_vm._v(\" \"+_vm._s(c.text)+\" \")])})],2)]:undefined}},{key:\"item.data-table-expand\",fn:function(ref){\n                        var item = ref.item;\n                        var expand = ref.expand;\n                        var isExpanded = ref.isExpanded;\nreturn [_c('v-tooltip',{attrs:{\"bottom\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\n                        var on = ref.on;\nreturn [(item._id)?_c('v-icon',_vm._g({ref:\"expandIcon\",on:{\"click\":function($event){expand(!isExpanded);\n                  _vm.doExpand(item, isExpanded);}}},on),[_vm._v(\" \"+_vm._s(isExpanded ? \"mdi-arrow-up-drop-circle-outline\" : \"mdi-arrow-down-drop-circle-outline\")+\" \")]):_vm._e()]}}],null,true)},[_c('span',[_vm._v(\"More Detail\")])])]}},{key:\"expanded-item\",fn:function(ref){\n                  var headers = ref.headers;\n                  var item = ref.item;\nreturn [_c('td',{staticClass:\"ma-0 pa-0\",staticStyle:{\"height\":\"auto\",\"overflow\":\"hidden\"},attrs:{\"colspan\":headers.length}},[_c('v-container',[_c('v-row',{key:_vm.dropKey,staticClass:\"drop-zone\",attrs:{\"align\":\"start\",\"justify\":\"start\"}},_vm._l((_vm.sortedDraggedObjects(item)),function(d,i){return _c('v-col',{key:d._id,attrs:{\"draggable\":true},on:{\"dragover\":function($event){$event.preventDefault();return _vm.onDragOver($event, i)},\"dragstart\":function($event){return _vm.onDragStart(d, i)},\"drop\":function($event){return _vm.onDropItem(item, i)}}},[_c('v-card',{domProps:{\"innerHTML\":_vm._s(\n                      _vm.droppedObjectTemplate ? _vm.droppedObjectTemplate(d, i) : ''\n                    )}})],1)}),1)],1)],1)]}},(_vm.$root.isMobile && _vm.mobileViewTemplate && _vm.breakpoint)?{key:\"item\",fn:function(ref){\n                    var item = ref.item;\n                    var index = ref.index;\nreturn [_c('v-mobile-view-table-template',{attrs:{\"tableName\":_vm.tableName,\"item\":item,\"index\":index,\"getItemColor\":_vm.getItemColor ? _vm.getItemColor : null,\"editCurrentRecord\":_vm.editCurrentRecord,\"linkClick\":_vm.linkClick,\"getTemplate\":_vm.getTemplate,\"parentObject\":_vm.parentObject}})]}}:null],null,true),model:{value:(_vm.selected),callback:function ($$v) {_vm.selected=$$v},expression:\"selected\"}},[_c('template',{slot:\"footer\"},[(_vm.totalFields)?_c('hr'):_vm._e(),(_vm.totalFields)?_c('table',{staticClass:\"v-data-table mt-2\",staticStyle:{\"width\":\"100%\"}},[_c('tr',_vm._l((_vm.filteredHeaders),function(header,j){return _c('td',{key:j,attrs:{\"align\":\"right\"}},_vm._l((_vm.tableTotal),function(f,i){return _c('span',{key:i},[_c('strong',[(_vm.tableTotal[i]['field'] == header.value)?_c('span',{staticClass:\"mr-6\"},[_vm._v(\" \"+_vm._s(parseFloat(_vm.tableTotal[i][\"total\"]).toFixed(2))+\" \")]):_vm._e()])])}),0)}),0)]):_vm._e(),_c('div',{staticClass:\"fixed-footer\"},[_c('tr',[(_vm.editedItem && !_vm.tableInsertable)?_c('td'):_vm._e(),(_vm.editedItem && !_vm.tableInsertable)?_c('td',[_c('v-table-edited-item',{ref:\"edit_combo\",attrs:{\"editedItem\":_vm.editedItem,\"isNew\":_vm.isNew,\"onValueChange\":_vm.onValueChange,\"save\":_vm.save}})],1):_vm._e()]),_c('hr')])])],2):_vm._e()],1),(_vm.dList)?_c('d-list',{key:_vm.listKey,attrs:{\"width\":\"100%\",\"data_object\":_vm.data_object,\"editData\":_vm.editData,\"editRec\":_vm.editRec}}):_vm._e(),(_vm.dExcel)?_c('excel-table',{key:_vm.excelKey,ref:\"excel_table\",staticClass:\"mt-n4\",attrs:{\"table\":_vm.table,\"headers\":_vm.headers,\"data_object\":_vm.data_object,\"columnWidth\":_vm.excelColumnWidth},model:{value:(_vm.selected),callback:function ($$v) {_vm.selected=$$v},expression:\"selected\"}}):_vm._e(),(_vm.successMessage)?_c('v-snackbar',{attrs:{\"timeout\":5000,\"color\":\"success\"},scopedSlots:_vm._u([{key:\"action\",fn:function(ref){\n                    var attrs = ref.attrs;\nreturn [_c('v-btn',_vm._b({attrs:{\"text\":\"\"},on:{\"click\":function($event){_vm.successMessage = false}}},'v-btn',attrs,false),[_vm._v(\" Close \")])]}}],null,false,2702708244),model:{value:(_vm.successMessage),callback:function ($$v) {_vm.successMessage=$$v},expression:\"successMessage\"}},[_vm._v(\" \"+_vm._s(_vm.successMessage)+\" \")]):_vm._e(),(_vm.errorMessage != '' && _vm.errorMessage)?_c('v-alert',{staticClass:\"ma-4\",attrs:{\"timeout\":\"3000\",\"dismissible\":\"\",\"type\":\"error\"}},[_vm._v(\" \"+_vm._s(_vm.errorMessage)+\" \")]):_vm._e(),(_vm.$root.isMobile)?_c('v-app-bar',{staticClass:\"bottom-bar\",attrs:{\"bottom\":\"\",\"app\":true}},[_c('v-toolbar',{attrs:{\"flat\":\"\"}},[(\n            _vm.tableReady &&\n              !_vm.hideFooter &&\n              _vm.table.length > 10 &&\n              !_vm.editDisablePagination &&\n              !_vm.disablePagination\n          )?_c('v-pager',{attrs:{\"pageStart\":_vm.pageStart,\"pageStop\":_vm.pageStop,\"itemsLength\":_vm.itemsCount,\"navigate\":_vm.navigate,\"page\":_vm.page}}):_vm._e()],1)],1):_vm._e()],1),_c('v-dialog',{staticClass:\"assistant\",attrs:{\"width\":\"600\"},model:{value:(_vm.assistantModel),callback:function ($$v) {_vm.assistantModel=$$v},expression:\"assistantModel\"}},[(_vm.assistantVBind.customInstructions)?_c('v-ai-chat',_vm._b({},'v-ai-chat',_vm.assistantVBind,false)):_vm._e()],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Table copy.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Table copy.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Table copy.vue?vue&type=template&id=30847eae&\"\nimport script from \"./Table copy.vue?vue&type=script&lang=js&\"\nexport * from \"./Table copy.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Table copy.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VAlert } from 'vuetify/lib/components/VAlert';\nimport { VAppBar } from 'vuetify/lib/components/VAppBar';\nimport { VAutocomplete } from 'vuetify/lib/components/VAutocomplete';\nimport { VBadge } from 'vuetify/lib/components/VBadge';\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCheckbox } from 'vuetify/lib/components/VCheckbox';\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VContainer } from 'vuetify/lib/components/VGrid';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VEditDialog } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VLabel } from 'vuetify/lib/components/VLabel';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\nimport { VMenu } from 'vuetify/lib/components/VMenu';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VSnackbar } from 'vuetify/lib/components/VSnackbar';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VSwitch } from 'vuetify/lib/components/VSwitch';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VTextarea } from 'vuetify/lib/components/VTextarea';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VAlert,VAppBar,VAutocomplete,VBadge,VBtn,VCard,VCardText,VCardTitle,VCheckbox,VChip,VCol,VContainer,VDataTable,VDialog,VEditDialog,VIcon,VLabel,VList,VListItem,VListItemTitle,VMenu,VRow,VSelect,VSnackbar,VSpacer,VSwitch,VTab,VTabs,VTextField,VTextarea,VToolbar,VTooltip})\n"],"sourceRoot":""}