diff --git a/src/components/timeline/form/TimelineEditor/ActivityFilterBuilder.svelte b/src/components/timeline/form/TimelineEditor/ActivityFilterBuilder.svelte index 1c4debc3c2..e0f867b985 100644 --- a/src/components/timeline/form/TimelineEditor/ActivityFilterBuilder.svelte +++ b/src/components/timeline/form/TimelineEditor/ActivityFilterBuilder.svelte @@ -1,10 +1,6 @@ -
- - {#if shown} - -
- - - - -
-
- -
-
-
- Manually Select Types - {#if dirtyFilter.static_types?.length} - - {/if} -
-
-
- -
- { - requestAnimationFrame(() => { - if (!manualInputOpen) { - manualInputOpen = true; - } - }); - }} - /> - -
-
- (manualInputOpen = false)} - > -
- {#if filteredActivityTypes.length > 0} - onAddAllManualTypes()}> -
- Add {filteredActivityTypes.length !== $planModelActivityTypes.length ? 'Matching' : 'All'} + -
-
- {#each filteredActivityTypes as type} - onManualTypeToggled(type.name)}> - -1} - tabindex={-1} - style:pointer-events="none" - /> -
{type.name}
-
- {/each} - {:else} - No activities matching your filter - {/if} -
-
-
- {#if dirtyFilter.static_types?.length} -
- {#each dirtyFilter.static_types as name} - onManualTypeToggled(name)} /> - {/each} -
- {/if} -
-
-
-
-
- Dynamically Select Types -
Type includes...
-
- -
- {#if dirtyFilter.dynamic_type_filters?.length} -
-
- {#each dirtyFilter.dynamic_type_filters as filter, i (filter.id)} - onDynamicFilterRemove('dynamic_type_filters', filter.id)} - on:change={event => onDynamicFilterChange('dynamic_type_filters', event)} - verb={i === 0 ? 'Where' : 'and'} - schema={{ - Subsystem: { - does_not_include: { type: 'tag', values: $subsystemTags }, - includes: { type: 'tag', values: $subsystemTags }, - }, - Type: { - does_not_equal: { type: 'variant', values: $planModelActivityTypes.map(type => type.name) }, - does_not_include: { type: 'string' }, - equals: { type: 'variant', values: $planModelActivityTypes.map(type => type.name) }, - includes: { type: 'string' }, - }, - }} - /> - {/each} -
-
- {/if} -
-
-
-
- Other Filters -
Tags, parameter, scheduling goal, etc...
-
- -
- {#if dirtyFilter.other_filters?.length} -
-
- {#each dirtyFilter.other_filters as filter, i (filter.id)} - onDynamicFilterRemove('other_filters', filter.id)} - on:change={event => onDynamicFilterChange('other_filters', event)} - verb={i === 0 ? 'Where' : 'and'} - schema={{ - Name: { - does_not_equal: { type: 'string' }, - does_not_include: { type: 'string' }, - equals: { type: 'string' }, - includes: { type: 'string' }, - }, - Parameter: { - subfields: parameterSubfields, - }, - SchedulingGoalId: { - does_not_equal: { type: 'int' }, - equals: { type: 'int' }, - }, - Tags: { - does_not_include: { type: 'tag', values: $tags }, - includes: { type: 'tag', values: $tags }, - }, - }} - /> - {/each} -
-
- {/if} -
-
- - - -
-
- Resulting Types -
-
{matchingTypes.length} types
-
{instanceCount} instance{pluralize(instanceCount)}
-
-
- -
- - -
- {#each filteredMatchingTypes as type} - - - - {#if dirtyFilter.type_subfilters && dirtyFilter.type_subfilters[type.name] && dirtyFilter.type_subfilters[type.name].length} -
- {#each dirtyFilter.type_subfilters[type.name] as filter (filter.id)} - onTypeSubfilterRemove(type.name, filter.id)} - on:change={event => onTypeSubfilterChange(type.name, event)} - verb={''} - schema={{ - Name: { - does_not_equal: { type: 'string' }, - does_not_include: { type: 'string' }, - equals: { type: 'string' }, - includes: { type: 'string' }, - }, - Parameter: { - // Filter subfields to only those matching this type - subfields: parameterSubfields.filter(subfield => { - return subfield.activityTypes.indexOf(type.name) > -1; - }), - }, - SchedulingGoalId: { - does_not_equal: { type: 'int' }, - equals: { type: 'int' }, - }, - Tags: { - does_not_include: { type: 'tag', values: $tags }, - includes: { type: 'tag', values: $tags }, - }, - }} - /> - {/each} -
- {/if} -
-
- {/each} - {#if resultingTypesMessage} -
{resultingTypesMessage}
- {/if} -
-
-
-
- -
- {/if} -
- - + + + + diff --git a/src/components/timeline/form/TimelineEditor/ExternalEventFilterBuilder.svelte b/src/components/timeline/form/TimelineEditor/ExternalEventFilterBuilder.svelte index 549ee2fda4..9693923620 100644 --- a/src/components/timeline/form/TimelineEditor/ExternalEventFilterBuilder.svelte +++ b/src/components/timeline/form/TimelineEditor/ExternalEventFilterBuilder.svelte @@ -1,221 +1,65 @@ -
- - {#if shown} - -
- - - - -
-
- -
-
-
- Manually Select Types - {#if dirtyFilter.static_types?.length} - - {/if} -
-
-
- -
- { - requestAnimationFrame(() => { - if (!manualInputOpen) { - manualInputOpen = true; - } - }); - }} - /> - -
-
- (manualInputOpen = false)} - > -
- {#if filteredExternalEventTypes.length > 0} - onAddAllManualTypes()}> -
- Add {filteredExternalEventTypes.length !== $externalEventTypes.length ? 'Matching' : 'All'} + -
-
- {#each filteredExternalEventTypes as type} - onManualTypeToggled(type.name)}> - -1} - tabindex={-1} - style:pointer-events="none" - /> -
{type.name}
-
- {/each} - {:else} - No external events matching your filter - {/if} -
-
-
- {#if dirtyFilter.static_types?.length} -
- {#each dirtyFilter.static_types as name} - - onManualTypeToggled(name)} /> - {/each} -
- {/if} -
-
-
-
-
- Dynamically Select Types -
Type includes...
-
- -
- {#if dirtyFilter.dynamic_type_filters?.length} -
-
- {#each dirtyFilter.dynamic_type_filters as filter, i (filter.id)} - onDynamicFilterRemove('dynamic_type_filters', filter.id)} - on:change={event => onDynamicFilterChange('dynamic_type_filters', event)} - verb={i === 0 ? 'Where' : 'and'} - schema={{ - Type: { - does_not_equal: { type: 'variant', values: $externalEventTypes.map(type => type.name) }, - does_not_include: { type: 'string' }, - equals: { type: 'variant', values: $externalEventTypes.map(type => type.name) }, - includes: { type: 'string' }, - }, - }} - /> - {/each} -
-
- {/if} -
-
-
-
- Other Filters -
Names, attributes
-
- -
- {#if dirtyFilter.other_filters?.length} -
-
- {#each dirtyFilter.other_filters as filter, i (filter.id)} - - onDynamicFilterRemove('other_filters', filter.id)} - on:change={event => onDynamicFilterChange('other_filters', event)} - verb={i === 0 ? 'Where' : 'and'} - schema={{ - Attribute: { - subfields: parameterSubfields, - }, - Name: { - does_not_equal: { type: 'string' }, - does_not_include: { type: 'string' }, - equals: { type: 'string' }, - includes: { type: 'string' }, - }, - }} - /> - {/each} -
-
- {/if} -
-
- - - -
-
- Resulting Types -
-
{matchingTypes.length} types
-
- {instanceCount} instance{pluralize(instanceCount)} -
-
-
- -
- - -
- {#each filteredMatchingTypes as type} - - - - - {#if dirtyFilter.type_subfilters && dirtyFilter.type_subfilters[type.name] && dirtyFilter.type_subfilters[type.name].length} -
- {#each dirtyFilter.type_subfilters[type.name] as filter (filter.id)} - onTypeSubfilterRemove(type.name, filter.id)} - on:change={event => onTypeSubfilterChange(type.name, event)} - verb={''} - schema={{ - Attribute: { - // Filter subfields to only those matching this type - subfields: parameterSubfields.filter(subfield => { - return subfield.externalEventTypes.indexOf(type.name) > -1; - }), - }, - Name: { - does_not_equal: { type: 'string' }, - does_not_include: { type: 'string' }, - equals: { type: 'string' }, - includes: { type: 'string' }, - }, - }} - /> - {/each} -
- {/if} -
-
- {/each} - {#if resultingTypesMessage} -
{resultingTypesMessage}
- {/if} -
-
-
-
-
- {/if} -
- - + + + diff --git a/src/components/timeline/form/TimelineEditor/FilterBuilder.svelte b/src/components/timeline/form/TimelineEditor/FilterBuilder.svelte new file mode 100644 index 0000000000..99a7aff836 --- /dev/null +++ b/src/components/timeline/form/TimelineEditor/FilterBuilder.svelte @@ -0,0 +1,697 @@ + + + + +
+ + {#if shown} + +
+ + + + +
+
+ +
+
+
+ Manually Select Types + {#if dirtyFilter.static_types?.length} + + {/if} +
+
+
+ +
+ { + requestAnimationFrame(() => { + if (!manualInputOpen) { + manualInputOpen = true; + } + }); + }} + /> + +
+
+ (manualInputOpen = false)} + > +
+ {#if filteredTypes.length > 0} + onAddAllManualTypes()}> +
+ Add {filteredTypes.length !== allTypes.length ? 'Matching' : 'All'} + +
+
+ {#each filteredTypes as type} + onManualTypeToggled(type.name)}> + -1} + tabindex={-1} + style:pointer-events="none" + /> +
{type.name}
+
+ {/each} + {:else} + {noItemsMessage} + {/if} +
+
+
+ {#if dirtyFilter.static_types?.length} +
+ {#each dirtyFilter.static_types as name} + onManualTypeToggled(name)} /> + {/each} +
+ {/if} +
+
+
+
+
+ Dynamically Select Types +
{dynamicTypeFilterHint}
+
+ +
+ {#if dirtyFilter.dynamic_type_filters?.length} +
+
+ {#each dirtyFilter.dynamic_type_filters as filterItem, i (filterItem.id)} + onDynamicFilterRemove('dynamic_type_filters', filterItem.id)} + on:change={event => onDynamicFilterChange('dynamic_type_filters', event)} + verb={i === 0 ? 'Where' : 'and'} + schema={dynamicTypeFilterSchema} + /> + {/each} +
+
+ {/if} +
+
+
+
+ Other Filters +
{otherFilterHint}
+
+ +
+ {#if dirtyFilter.other_filters?.length} +
+
+ {#each dirtyFilter.other_filters as filterItem, i (filterItem.id)} + onDynamicFilterRemove('other_filters', filterItem.id)} + on:change={event => onDynamicFilterChange('other_filters', event)} + verb={i === 0 ? 'Where' : 'and'} + schema={otherFilterSchema} + /> + {/each} +
+
+ {/if} +
+
+ + + +
+
+ Resulting Types +
+
+ + {matchingTypes.length} types +
+
+ {instanceCount} instance{pluralize(instanceCount)} +
+
+
+ +
+ + +
+ {#each filteredMatchingTypes as type} + + + + {#if dirtyFilter.type_subfilters && dirtyFilter.type_subfilters[type.name] && dirtyFilter.type_subfilters[type.name].length} +
+ {#each dirtyFilter.type_subfilters[type.name] as subfilter (subfilter.id)} + onTypeSubfilterRemove(type.name, subfilter.id)} + on:change={event => onTypeSubfilterChange(type.name, event)} + verb={''} + schema={typeSubfilterSchema} + /> + {/each} +
+ {/if} +
+
+ {/each} + {#if resultingTypesMessage} +
{resultingTypesMessage}
+ {/if} +
+
+
+
+ +
+ {/if} +
+ +