diff --git a/client/src/components/ActivityBar/ActivityBar.vue b/client/src/components/ActivityBar/ActivityBar.vue index 345be2ad217..9ccd1cdaf6c 100644 --- a/client/src/components/ActivityBar/ActivityBar.vue +++ b/client/src/components/ActivityBar/ActivityBar.vue @@ -16,6 +16,7 @@ import InteractiveItem from "./Items/InteractiveItem.vue"; import NotificationItem from "./Items/NotificationItem.vue"; import UploadItem from "./Items/UploadItem.vue"; import FlexPanel from "@/components/Panels/FlexPanel.vue"; +import MultiviewPanel from "@/components/Panels/MultiviewPanel.vue"; import NotificationsPanel from "@/components/Panels/NotificationsPanel.vue"; import SettingsPanel from "@/components/Panels/SettingsPanel.vue"; import ToolPanel from "@/components/Panels/ToolPanel.vue"; @@ -150,7 +151,7 @@ function onToggleSidebar(toggle: string) { :to="activity.to" @click="onToggleSidebar()" /> + diff --git a/client/src/components/Common/FilterMenu.test.ts b/client/src/components/Common/FilterMenu.test.ts index de6f9049350..c9955acee30 100644 --- a/client/src/components/Common/FilterMenu.test.ts +++ b/client/src/components/Common/FilterMenu.test.ts @@ -154,14 +154,14 @@ describe("FilterMenu", () => { // `has_help` filter should have help modal button expect(wrapper.find("[title='Value Help']").classes().includes("btn")).toBe(true); // ranged time field (has 2 datepickers) - const createdGtInput = wrapper.find("[placeholder='creation time after']"); - const createdLtInput = wrapper.find("[placeholder='creation time before']"); + const createdGtInput = wrapper.find("[placeholder='after creation time']"); + const createdLtInput = wrapper.find("[placeholder='before creation time']"); createdGtInput.setValue("January 1, 2022"); createdLtInput.setValue("January 1, 2023"); expect(wrapper.findAll(".b-form-datepicker").length).toBe(2); // ranged number field (has different placeholder: greater instead of after...) - const indexGtInput = wrapper.find("[placeholder='index greater']"); - const indexLtInput = wrapper.find("[placeholder='index lower']"); + const indexGtInput = wrapper.find("[placeholder='greater than index']"); + const indexLtInput = wrapper.find("[placeholder='lower than index']"); indexGtInput.setValue("1234"); indexLtInput.setValue("5678"); // default bool filter diff --git a/client/src/components/Common/FilterMenuRanged.vue b/client/src/components/Common/FilterMenuRanged.vue index 73ebcb316d4..ae1d2527112 100644 --- a/client/src/components/Common/FilterMenuRanged.vue +++ b/client/src/components/Common/FilterMenuRanged.vue @@ -49,11 +49,11 @@ function hasError(field: string) { function localPlaceholder(comp: "gt" | "lt") { if (comp == "gt") { - const field = isDateType.value ? "after" : "greater"; - return `${props.filter.placeholder} ${field}`; + const field = isDateType.value ? "after" : "greater than"; + return `${field} ${props.filter.placeholder}`; } else { - const field = isDateType.value ? "before" : "lower"; - return `${props.filter.placeholder} ${field}`; + const field = isDateType.value ? "before" : "lower than"; + return `${field} ${props.filter.placeholder}`; } } diff --git a/client/src/components/History/HistoriesFilters.js b/client/src/components/History/HistoriesFilters.js new file mode 100644 index 00000000000..945ef962212 --- /dev/null +++ b/client/src/components/History/HistoriesFilters.js @@ -0,0 +1,17 @@ +import Filtering, { compare, contains, expandNameTag, toDate } from "utils/filtering"; + +const validFilters = { + name: { placeholder: "name", type: String, handler: contains("name"), menuItem: true }, + tag: { placeholder: "tag", type: String, handler: contains("tags", "tag", expandNameTag), menuItem: true }, + annotation: { placeholder: "annotation", type: String, handler: contains("annotation"), menuItem: true }, + update_time: { + placeholder: "updated time", + type: Date, + handler: compare("update_time", "le", toDate), + isRangeInput: true, + menuItem: true, + }, + update_time_ge: { handler: compare("update_time", "ge", toDate), menuItem: false }, + update_time_le: { handler: compare("update_time", "le", toDate), menuItem: false }, +}; +export const HistoriesFilters = new Filtering(validFilters); diff --git a/client/src/components/History/HistoryScrollList.vue b/client/src/components/History/HistoryScrollList.vue new file mode 100644 index 00000000000..f0c74ed3daf --- /dev/null +++ b/client/src/components/History/HistoryScrollList.vue @@ -0,0 +1,428 @@ + + + + + diff --git a/client/src/components/History/Modals/SelectorModal.vue b/client/src/components/History/Modals/SelectorModal.vue index 98311f6906d..7c9f466755d 100644 --- a/client/src/components/History/Modals/SelectorModal.vue +++ b/client/src/components/History/Modals/SelectorModal.vue @@ -1,4 +1,8 @@