Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 4 additions & 20 deletions src/renderer/components/Modal/CommandLine.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,12 @@ import {
resetFilter,
setFilter,
} from 'renderer/redux/slices/data';
import { ColumnType, IMask, IUiModal } from 'interfaces/common';
import { IMask, IUiModal } from 'interfaces/common';
import { modals } from 'misc/constants';
import { parseDatasetCommand } from 'renderer/utils/commandLine';
import { getCommandHelperText } from 'renderer/components/hooks/useCommandAutocomplete';
import CommandAutocompleteInput from 'renderer/components/Common/CommandAutocompleteInput';
import getColumnTypes from 'renderer/utils/getColumnTypes';

const styles = {
dialog: {
Expand Down Expand Up @@ -85,25 +86,8 @@ const CommandLine: React.FC<IUiModal> = () => {
[metadata],
);
const columnTypes = useMemo(() => {
if (!metadata) {
return {};
}
const types: Record<string, ColumnType> = {};
metadata.columns.forEach((col) => {
if (
['integer', 'float', 'double', 'number'].includes(col.dataType)
) {
types[col.name] = 'number';
} else if (['date', 'datetime', 'time'].includes(col.dataType)) {
types[col.name] = 'date';
} else if (['boolean'].includes(col.dataType)) {
types[col.name] = 'boolean';
} else {
types[col.name] = 'string';
}
});
return types;
}, [metadata]);
return getColumnTypes(metadata, settings);
}, [metadata, settings]);
const currentVisibleColumns = currentMask?.columns ?? allColumnNames;

const recentCommandStrings = useMemo(() => {
Expand Down
26 changes: 2 additions & 24 deletions src/renderer/components/Modal/Filter/FilterBody.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ import EditIcon from '@mui/icons-material/Edit';
import { getHeader } from 'renderer/utils/readData';
import { handleTransformation } from 'renderer/utils/transformUtils';
import { formatFilterValueOption } from 'renderer/components/hooks/useCommandAutocomplete/utils';
import getColumnTypes from 'renderer/utils/getColumnTypes';

const styles = {
dialog: {
Expand Down Expand Up @@ -226,30 +227,7 @@ const FilterBody: React.FC<FilterBodyProps> = ({
const settings = useAppSelector((state) => state.settings);

const columnTypes = useMemo(() => {
const types: Record<string, ColumnType> = {};
const header = getHeader(metadata, settings);
// Get all columns with formatted dates;
const dateColumns = header
.filter((column) => column.numericDatetimeType)
.map((column) => column.id);
metadata.columns.forEach((column) => {
if (column.dataType === 'boolean') {
types[column.name.toLowerCase()] = 'boolean';
} else if (
['float', 'double', 'integer'].includes(column.dataType) &&
!dateColumns.includes(column.name)
) {
types[column.name.toLowerCase()] = 'number';
} else if (
['date', 'datetime', 'time'].includes(column.dataType) &&
!dateColumns.includes(column.name)
) {
types[column.name.toLowerCase()] = 'date';
} else {
types[column.name.toLowerCase()] = 'string';
}
});
return types;
return getColumnTypes(metadata, settings);
}, [metadata, settings]);

const filterForValidation = useMemo(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,10 @@ export const getFilterAutocomplete = ({
}

return {
options: FILTER_COMPARATORS[columnTypes[columnId] || 'string'],
options:
FILTER_COMPARATORS[
columnTypes[columnId.toLowerCase()] || 'string'
],
replaceStart: context.sourceText.length,
replaceEnd: context.sourceText.length,
insertSuffix: ' ',
Expand Down Expand Up @@ -157,7 +160,9 @@ export const getFilterAutocomplete = ({

return {
options: filterOptions(
FILTER_COMPARATORS[columnTypes[columnId] || 'string'],
FILTER_COMPARATORS[
columnTypes[columnId.toLowerCase()] || 'string'
],
currentFilterPrefix,
),
replaceStart,
Expand Down
8 changes: 5 additions & 3 deletions src/renderer/components/hooks/useCommandAutocomplete/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ export const useCommandAutocomplete = ({
settings,
});

const columnType = columnTypes[columnId];
const columnType = columnTypes[columnId.toLowerCase()];
const formattedValues = (values[columnId]?.values ?? []).map(
(value) =>
formatFilterValueOption(
Expand All @@ -136,8 +136,10 @@ export const useCommandAutocomplete = ({
const comparableVariables = metadata.columns
.filter(
(item) =>
item.name !== columnId &&
columnTypes[item.name] === columnTypes[columnId],
item.name.toLowerCase() !==
columnId.toLowerCase() &&
columnTypes[item.name.toLowerCase()] ===
columnTypes[columnId.toLowerCase()],
)
.map((item) => item.name);

Expand Down
34 changes: 34 additions & 0 deletions src/renderer/utils/getColumnTypes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { DatasetJsonMetadata, ISettings, ColumnType } from 'interfaces/common';
import { getHeader } from 'renderer/utils/readData';

const getColumnTypes = (
metadata: DatasetJsonMetadata,
settings: ISettings,
): Record<string, ColumnType> => {
const types: Record<string, ColumnType> = {};
const header = getHeader(metadata, settings);
// Get all columns with formatted dates;
const dateColumns = header
.filter((column) => column.numericDatetimeType)
.map((column) => column.id);
metadata.columns.forEach((column) => {
if (column.dataType === 'boolean') {
types[column.name.toLowerCase()] = 'boolean';
} else if (
['float', 'double', 'integer'].includes(column.dataType) &&
Comment thread
DmitryMK marked this conversation as resolved.
!dateColumns.includes(column.name)
) {
types[column.name.toLowerCase()] = 'number';
} else if (
['date', 'datetime', 'time'].includes(column.dataType) &&
!dateColumns.includes(column.name)
) {
types[column.name.toLowerCase()] = 'date';
} else {
types[column.name.toLowerCase()] = 'string';
}
});
return types;
};

export default getColumnTypes;