Skip to content

Commit 007cda3

Browse files
committed
Implement raw date filter
1 parent b3156c1 commit 007cda3

File tree

7 files changed

+29
-25
lines changed

7 files changed

+29
-25
lines changed

src/lib/Crud/Form.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import type { CrudOperation, FieldInterface, FieldOptions } from '$lib';
22

3-
export type SubmittedData = Record<string, FormDataEntryValue>;
3+
export type SubmittedData = Record<string, FormDataEntryValue|Array<FormDataEntryValue>>;
44

55
/**
66
* Function to get an record of {@link FormDataEntryValue} items from an "onSubmit" form {@link SubmitEvent} object.
@@ -18,8 +18,15 @@ export function getSubmittedFormData(event: SubmitEvent): SubmittedData {
1818
return {};
1919
}
2020

21-
new FormData(target as HTMLFormElement, event.submitter).forEach((value, key) => {
22-
normalizedData[key] = value;
21+
const formData = new FormData(target as HTMLFormElement, event.submitter);
22+
23+
formData.forEach((value, key) => {
24+
if (normalizedData[key] && !Array.isArray(normalizedData[key])) {
25+
normalizedData[key] = [normalizedData[key]];
26+
normalizedData[key].push(value);
27+
} else {
28+
normalizedData[key] = value;
29+
}
2330
});
2431

2532
return normalizedData;

src/lib/themes/svelte/carbon/DataTable/Toolbar/DataTableToolbar.svelte

+2-3
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
delete data[key];
4444
}
4545
});
46-
console.info('submitted filters', data);
4746
dispatchEvent('submitFilters', data);
4847
}
4948
@@ -67,8 +66,8 @@
6766
{/if}
6867

6968
{#if filters.length}
70-
<Accordion open={Object.keys(filtersValues).length > 0}>
71-
<AccordionItem>
69+
<Accordion>
70+
<AccordionItem open={Object.values(filtersValues).filter(i => !!i).length > 0}>
7271
<slot slot="title">
7372
<FilterIcon />
7473
{$_('datatable.filters.menu_title')}

src/lib/themes/svelte/carbon/DataTable/Toolbar/ToolbarAction.svelte

-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88
99
export let action: Action;
1010
export let action_arguments: Array<unknown> = [];
11-
12-
console.info('Action: ', action);
1311
</script>
1412

1513
{#if action instanceof UrlAction}

src/lib/themes/svelte/carbon/FilterComponents/DateRangeFilter.svelte

+10-7
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,19 @@
1212
let from: string = '' ;
1313
let to: string = '' ;
1414
15-
// Extracted from Carbon's DatePicker types
16-
type ChangeEvent = string | {
17-
selectedDates: [dateFrom: Date, dateTo?: Date | undefined];
18-
dateStr: string | { from: string; to: string; };
19-
};
15+
if (value && Array.isArray(value)) {
16+
if (value[0]) {
17+
from = value[0];
18+
}
19+
if (value[1]) {
20+
to = value[1];
21+
}
22+
}
2023
</script>
2124

2225
<FilterContainer {filter}>
2326
<DatePicker datePickerType="range" bind:valueFrom={from} bind:valueTo={to}>
24-
<DatePickerInput labelText={$_('filters.date.from')} name={filter.field + '[0]'} value={from || ''} />
25-
<DatePickerInput labelText={$_('filters.date.to')} name={filter.field + '[1]'} value={to || ''} />
27+
<DatePickerInput labelText={$_('filters.date.from')} name={filter.field} value={from || ''} />
28+
<DatePickerInput labelText={$_('filters.date.to')} name={filter.field} value={to || ''} />
2629
</DatePicker>
2730
</FilterContainer>

src/lib/themes/svelte/carbon/ViewFieldsComponents/ArrayField.test.ts

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ describe(
2929
expect(label).toBeDefined();
3030
expect(label?.innerHTML).toStrictEqual('Text field');
3131
const valueElement = label?.parentElement?.nextElementSibling;
32-
console.info('+=====================+');
3332
expect(valueElement).toBeDefined();
3433
expect(valueElement?.childNodes).toBeDefined();
3534
expect(valueElement?.childNodes[0]).toBeInstanceOf(Text);

src/lib/themes/svelte/carbon/ViewFieldsComponents/CrudEntityField.svelte

-5
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,18 @@
1616
(def: CrudDefinition<unknown>) => def.name === field.options.crud_name
1717
)[0] ?? undefined;
1818
19-
console.info('CrudEntityField created with params: ', { field, operation, value });
20-
2119
async function fetchData() {
2220
if (!crud) {
2321
console.error('No CRUD to fetch data from.');
2422
return;
2523
}
2624
27-
console.info('Fetching...');
2825
const fieldOperation = new SingleField(
2926
field.options.get_provider_operation?.name ?? 'entity_view',
3027
field.options.get_provider_operation?.options ?? {}
3128
);
3229
fieldOperation.crud = crud;
3330
fieldOperation.dashboard = operation.dashboard;
34-
console.info('Shallow field: ', fieldOperation);
35-
console.info('value: ', value);
3631
3732
return crud.options.stateProvider.provide(fieldOperation, {
3833
field_value: value

src/testApp/BookCrud.ts

+7-4
Original file line numberDiff line numberDiff line change
@@ -146,16 +146,19 @@ export const bookCrud = new CrudDefinition<Book>({
146146
return false;
147147
}
148148
if (filters.publishedAt) {
149-
console.info('PUBLISHED AT', filters, filters.publishedAt);
150-
return true;
149+
const publishedAtFilter = filters.publishedAt as unknown as [string|undefined, string|undefined];
150+
if (publishedAtFilter[0] && new Date(entity.publishedAt) < new Date(publishedAtFilter[0])) {
151+
return false;
152+
}
153+
if (publishedAtFilter[1] && new Date(entity.publishedAt) > new Date(publishedAtFilter[1])) {
154+
return false;
155+
}
151156
}
152157

153158
return true;
154159
});
155160
}
156161

157-
console.info('Sort: ', requestParameters.sort);
158-
159162
if (requestParameters.sort) {
160163
if (!requestParameters.sort?.title && !requestParameters.sort?.publishedAt) {
161164
console.warn('Sorting not supported for these sort parameters:');

0 commit comments

Comments
 (0)