From e27118da27e389b20b48c17c1a5a98003bfef731 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Mon, 23 Jan 2023 17:36:49 +0100 Subject: [PATCH 01/15] chore: move filter to general module --- packages/shared/components/Proposals.svelte | 7 +++-- .../shared/components/filters/Filter.svelte | 7 ++--- .../components/filters/FilterItem.svelte | 2 +- .../filters/items/AssetFilterItem.svelte | 2 +- .../filters/items/DateFilterItem.svelte | 4 +-- .../filters/items/NumberFilterItem.svelte | 4 +-- .../filters/items/OrderFilterItem.svelte | 4 +-- .../filters/items/SelectionFilterItem.svelte | 2 +- .../contexts/governance/interfaces/index.ts | 1 + .../interfaces/proposal-filter.interface.ts | 7 +++++ .../lib/contexts/governance/stores/index.ts | 1 + .../stores/proposal-filter.store.ts | 27 +++++++++++++++++++ .../enums/filters/asset-order-option.enum.ts | 0 .../enums/filters/boolean-option.enum.ts | 0 .../enums/filters/date-filter-option.enum.ts | 0 .../enums/filters/date-unit.enum.ts | 0 .../{wallet => utils}/enums/filters/index.ts | 0 .../enums/filters/internal-external.enum.ts | 0 .../filters/number-filter-option.enum.ts | 0 .../enums/filters/order-option.enum.ts | 0 .../enums/filters/status-option.enum.ts | 0 .../filter/date-filter-input.interface.ts | 2 +- .../filter/filter-unit.interface.ts | 2 +- .../interfaces/filter/index.ts | 1 - .../filter/number-filter-input.interface.ts | 0 .../shared/lib/core/wallet/enums/index.ts | 1 - ...erface.ts => activity-filter.interface.ts} | 11 +------- .../interfaces/asset-filter.interface.ts | 7 +++++ .../lib/core/wallet/interfaces/index.ts | 4 +-- .../selected-account-activities.store.ts | 13 +++++---- .../stores/selected-account-assets.store.ts | 3 ++- .../core/wallet/utils/isVisibleActivity.ts | 18 ++++++------- .../lib/core/wallet/utils/isVisibleAsset.ts | 2 +- .../lib/core/wallet/utils/sortAssets.ts | 2 +- 34 files changed, 84 insertions(+), 50 deletions(-) create mode 100644 packages/shared/lib/contexts/governance/interfaces/proposal-filter.interface.ts create mode 100644 packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts rename packages/shared/lib/core/{wallet => utils}/enums/filters/asset-order-option.enum.ts (100%) rename packages/shared/lib/core/{wallet => utils}/enums/filters/boolean-option.enum.ts (100%) rename packages/shared/lib/core/{wallet => utils}/enums/filters/date-filter-option.enum.ts (100%) rename packages/shared/lib/core/{wallet => utils}/enums/filters/date-unit.enum.ts (100%) rename packages/shared/lib/core/{wallet => utils}/enums/filters/index.ts (100%) rename packages/shared/lib/core/{wallet => utils}/enums/filters/internal-external.enum.ts (100%) rename packages/shared/lib/core/{wallet => utils}/enums/filters/number-filter-option.enum.ts (100%) rename packages/shared/lib/core/{wallet => utils}/enums/filters/order-option.enum.ts (100%) rename packages/shared/lib/core/{wallet => utils}/enums/filters/status-option.enum.ts (100%) rename packages/shared/lib/core/{wallet => utils}/interfaces/filter/date-filter-input.interface.ts (87%) rename packages/shared/lib/core/{wallet => utils}/interfaces/filter/filter-unit.interface.ts (92%) rename packages/shared/lib/core/{wallet => utils}/interfaces/filter/index.ts (79%) rename packages/shared/lib/core/{wallet => utils}/interfaces/filter/number-filter-input.interface.ts (100%) rename packages/shared/lib/core/wallet/interfaces/{filter/filter.interface.ts => activity-filter.interface.ts} (65%) create mode 100644 packages/shared/lib/core/wallet/interfaces/asset-filter.interface.ts diff --git a/packages/shared/components/Proposals.svelte b/packages/shared/components/Proposals.svelte index dd3ba659eaa..fb2f5d9b8bf 100644 --- a/packages/shared/components/Proposals.svelte +++ b/packages/shared/components/Proposals.svelte @@ -1,9 +1,9 @@ diff --git a/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts b/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts new file mode 100644 index 00000000000..f3a75ef9f7b --- /dev/null +++ b/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts @@ -0,0 +1,45 @@ +import { IProposal, ProposalFilter } from '../interfaces' +import { BooleanFilterOption } from '@core/utils/enums/filters' + +export function isVisibleProposal(proposal: IProposal, filter: ProposalFilter): boolean { + if (!isVisibleWithActivePhaseFilter(proposal, filter)) { + return false + } + if (!isVisibleWithActiveTypeFilter(proposal, filter)) { + return false + } + if (!isVisibleWithActivePraticipatedFilter(proposal, filter)) { + return false + } + return true +} + +function isVisibleWithActivePraticipatedFilter(proposal: IProposal, filter: ProposalFilter): boolean { + if ( + !filter.participated.active || + filter.participated.selected === BooleanFilterOption.No // && proposal.participated + ) { + return true + // return false + } + return true +} + +function isVisibleWithActiveTypeFilter(proposal: IProposal, filter: ProposalFilter): boolean { + if (filter.type.active && filter.type.selected) { + // if (filter.type.selected !== proposal.type) { + return true + // return false + // } + } + return true +} + +function isVisibleWithActivePhaseFilter(proposal: IProposal, filter: ProposalFilter): boolean { + if (filter.phase.active && filter.phase.selected) { + if (filter.phase.selected !== proposal.status) { + return false + } + } + return true +} From 641b19e3e664e5b10e62af8e177767f5e2cdd755 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Tue, 24 Jan 2023 12:06:38 +0100 Subject: [PATCH 04/15] enhancement: add proposal type filter --- .../interfaces/proposal.interface.ts | 3 +- .../utils/createProposalsFromEvents.ts | 41 +++++++++++-------- .../governance/utils/isVisibleProposal.ts | 7 ++-- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/packages/shared/lib/contexts/governance/interfaces/proposal.interface.ts b/packages/shared/lib/contexts/governance/interfaces/proposal.interface.ts index c6b2b6dde4f..9d43f0a2966 100644 --- a/packages/shared/lib/contexts/governance/interfaces/proposal.interface.ts +++ b/packages/shared/lib/contexts/governance/interfaces/proposal.interface.ts @@ -1,5 +1,5 @@ import { INode } from '@core/network' -import { ProposalStatus } from '../enums' +import { ProposalStatus, ProposalType } from '../enums' import { IOrganization } from './organization.interface' export interface IProposal { @@ -7,6 +7,7 @@ export interface IProposal { milestones?: Record organization?: IOrganization status: ProposalStatus + type: ProposalType title: string nodeUrls: INode[] } diff --git a/packages/shared/lib/contexts/governance/utils/createProposalsFromEvents.ts b/packages/shared/lib/contexts/governance/utils/createProposalsFromEvents.ts index 2b626e8b78e..15babe07a3b 100644 --- a/packages/shared/lib/contexts/governance/utils/createProposalsFromEvents.ts +++ b/packages/shared/lib/contexts/governance/utils/createProposalsFromEvents.ts @@ -2,11 +2,12 @@ import { get } from 'svelte/store' import { Event } from '@iota/wallet' -import { ProposalStatus } from '@contexts/governance/enums' +import { ProposalStatus, ProposalType } from '@contexts/governance/enums' import { IProposal } from '@contexts/governance/interfaces' -import { nodeInfo } from '@core/network' -import { activeProfile } from '@core/profile' +import { nodeInfo, OFFICIAL_NODE_URLS } from '@core/network' +import { activeProfile, activeProfileId } from '@core/profile' import { getVotingEvents } from '@core/profile-manager' +import { proposalsState } from '..' export async function createProposals(): Promise { const events = await getVotingEvents() @@ -16,30 +17,36 @@ export async function createProposals(): Promise { function createProposalFromEvent(event: Event): IProposal { const { data, id } = event - const proposal = { + + const officialNodeUrls = OFFICIAL_NODE_URLS[get(activeProfile).networkProtocol][get(activeProfile).networkType] + const proposalNodeUrl = get(proposalsState)[get(activeProfileId)]?.[id].nodeUrl + const isOfficialNetwork = officialNodeUrls.includes(proposalNodeUrl) + + const milestones = { + [ProposalStatus.Upcoming]: 0, // TODO: fix this + [ProposalStatus.Commencing]: data.milestoneIndexCommence, + [ProposalStatus.Holding]: data.milestoneIndexStart, + [ProposalStatus.Ended]: data.milestoneIndexEnd, + } + + const status = getLatestStatus(milestones) + + const proposal: IProposal = { id, title: event.data.name, - status: ProposalStatus.Upcoming, - milestones: { - [ProposalStatus.Upcoming]: 0, // TODO: fix this - [ProposalStatus.Commencing]: data.milestoneIndexCommence, - [ProposalStatus.Holding]: data.milestoneIndexStart, - [ProposalStatus.Ended]: data.milestoneIndexEnd, - }, + status: status ?? ProposalStatus.Upcoming, + milestones, // TODO: figure out a better way to get the node URLs nodeUrls: get(activeProfile)?.clientOptions?.nodes, + type: isOfficialNetwork ? ProposalType.Official : ProposalType.Custom, } - const status = getLatestStatus(proposal) - if (status) { - proposal.status = status - } return proposal } -function getLatestStatus(proposal: IProposal): ProposalStatus { +function getLatestStatus(milestones: Record): ProposalStatus { const latestMilestoneIndex = get(nodeInfo)?.status?.latestMilestone.index - const milestoneDifferences = Object.entries(proposal?.milestones).map(([status, milestone]) => ({ + const milestoneDifferences = Object.entries(milestones).map(([status, milestone]) => ({ status, milestoneDifference: latestMilestoneIndex - milestone, })) diff --git a/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts b/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts index f3a75ef9f7b..f38054ab35f 100644 --- a/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts +++ b/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts @@ -27,10 +27,9 @@ function isVisibleWithActivePraticipatedFilter(proposal: IProposal, filter: Prop function isVisibleWithActiveTypeFilter(proposal: IProposal, filter: ProposalFilter): boolean { if (filter.type.active && filter.type.selected) { - // if (filter.type.selected !== proposal.type) { - return true - // return false - // } + if (filter.type.selected !== proposal.type) { + return false + } } return true } From 84d1f523904333588f250da3e334e3d3c8304047 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Tue, 24 Jan 2023 14:58:51 +0100 Subject: [PATCH 05/15] enhancement: add participated filter --- .../interfaces/proposal.interface.ts | 1 + .../utils/createProposalsFromEvents.ts | 9 ++++++--- .../utils/getParticipationsForProposal.ts | 20 +++++++++++++++++++ .../lib/contexts/governance/utils/index.ts | 1 + .../governance/utils/isVisibleProposal.ts | 8 ++++---- .../governance/utils/isVotingForProposal.ts | 17 ++++------------ 6 files changed, 36 insertions(+), 20 deletions(-) create mode 100644 packages/shared/lib/contexts/governance/utils/getParticipationsForProposal.ts diff --git a/packages/shared/lib/contexts/governance/interfaces/proposal.interface.ts b/packages/shared/lib/contexts/governance/interfaces/proposal.interface.ts index 9d43f0a2966..e2ca54521cd 100644 --- a/packages/shared/lib/contexts/governance/interfaces/proposal.interface.ts +++ b/packages/shared/lib/contexts/governance/interfaces/proposal.interface.ts @@ -9,5 +9,6 @@ export interface IProposal { status: ProposalStatus type: ProposalType title: string + participated: boolean nodeUrls: INode[] } diff --git a/packages/shared/lib/contexts/governance/utils/createProposalsFromEvents.ts b/packages/shared/lib/contexts/governance/utils/createProposalsFromEvents.ts index 15babe07a3b..2713bbb39b5 100644 --- a/packages/shared/lib/contexts/governance/utils/createProposalsFromEvents.ts +++ b/packages/shared/lib/contexts/governance/utils/createProposalsFromEvents.ts @@ -7,21 +7,23 @@ import { IProposal } from '@contexts/governance/interfaces' import { nodeInfo, OFFICIAL_NODE_URLS } from '@core/network' import { activeProfile, activeProfileId } from '@core/profile' import { getVotingEvents } from '@core/profile-manager' -import { proposalsState } from '..' +import { getParticipationsForProposal, proposalsState } from '..' export async function createProposals(): Promise { const events = await getVotingEvents() - const proposals: IProposal[] = events?.map(createProposalFromEvent) + const proposals: IProposal[] = await Promise.all(events?.map(async (event) => createProposalFromEvent(event))) return proposals } -function createProposalFromEvent(event: Event): IProposal { +async function createProposalFromEvent(event: Event): Promise { const { data, id } = event const officialNodeUrls = OFFICIAL_NODE_URLS[get(activeProfile).networkProtocol][get(activeProfile).networkType] const proposalNodeUrl = get(proposalsState)[get(activeProfileId)]?.[id].nodeUrl const isOfficialNetwork = officialNodeUrls.includes(proposalNodeUrl) + const participated = (await getParticipationsForProposal(id)) !== undefined + const milestones = { [ProposalStatus.Upcoming]: 0, // TODO: fix this [ProposalStatus.Commencing]: data.milestoneIndexCommence, @@ -39,6 +41,7 @@ function createProposalFromEvent(event: Event): IProposal { // TODO: figure out a better way to get the node URLs nodeUrls: get(activeProfile)?.clientOptions?.nodes, type: isOfficialNetwork ? ProposalType.Official : ProposalType.Custom, + participated, } return proposal diff --git a/packages/shared/lib/contexts/governance/utils/getParticipationsForProposal.ts b/packages/shared/lib/contexts/governance/utils/getParticipationsForProposal.ts new file mode 100644 index 00000000000..1ae7d459a4b --- /dev/null +++ b/packages/shared/lib/contexts/governance/utils/getParticipationsForProposal.ts @@ -0,0 +1,20 @@ +import { get } from 'svelte/store' + +import type { OutputId, ParticipationOverview, TrackedParticipationOverview } from '@iota/wallet' + +import { participationOverview } from '@contexts/governance/stores' +import { getParticipationOverview, selectedAccountIndex } from '@core/account' + +export async function getParticipationsForProposal( + proposalId: string, + accountIndex = get(selectedAccountIndex) +): Promise<{ [outputId: OutputId]: TrackedParticipationOverview }> { + let overview: ParticipationOverview + if (accountIndex === get(selectedAccountIndex)) { + overview = get(participationOverview) + } else { + overview = await getParticipationOverview(accountIndex) + } + + return overview?.participations?.[proposalId] +} diff --git a/packages/shared/lib/contexts/governance/utils/index.ts b/packages/shared/lib/contexts/governance/utils/index.ts index 6d7e84f5e98..4c008033f34 100644 --- a/packages/shared/lib/contexts/governance/utils/index.ts +++ b/packages/shared/lib/contexts/governance/utils/index.ts @@ -2,6 +2,7 @@ export * from './calculateWeightedVotes' export * from './createProposalsFromEvents' export * from './getNumberOfActiveProposals' export * from './getNumberOfVotingProposals' +export * from './getParticipationsForProposal' export * from './getTotalNumberOfProposals' export * from './isAnyAccountVotingForSelectedProposal' export * from './isParticipationOutput' diff --git a/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts b/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts index f38054ab35f..71bb87c9eb5 100644 --- a/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts +++ b/packages/shared/lib/contexts/governance/utils/isVisibleProposal.ts @@ -16,11 +16,11 @@ export function isVisibleProposal(proposal: IProposal, filter: ProposalFilter): function isVisibleWithActivePraticipatedFilter(proposal: IProposal, filter: ProposalFilter): boolean { if ( - !filter.participated.active || - filter.participated.selected === BooleanFilterOption.No // && proposal.participated + filter.participated.active && + ((filter.participated.selected === BooleanFilterOption.No && proposal.participated) || + (filter.participated.selected === BooleanFilterOption.Yes && !proposal.participated)) ) { - return true - // return false + return false } return true } diff --git a/packages/shared/lib/contexts/governance/utils/isVotingForProposal.ts b/packages/shared/lib/contexts/governance/utils/isVotingForProposal.ts index 2e22ce62a38..88450bd4d8b 100644 --- a/packages/shared/lib/contexts/governance/utils/isVotingForProposal.ts +++ b/packages/shared/lib/contexts/governance/utils/isVotingForProposal.ts @@ -1,22 +1,13 @@ import { get } from 'svelte/store' - -import type { ParticipationOverview, TrackedParticipationOverview } from '@iota/wallet' - -import { participationOverview } from '@contexts/governance/stores' -import { getParticipationOverview, selectedAccountIndex } from '@core/account' +import type { TrackedParticipationOverview } from '@iota/wallet' +import { selectedAccountIndex } from '@core/account' +import { getParticipationsForProposal } from './getParticipationsForProposal' export async function isVotingForProposal( proposalId: string, accountIndex = get(selectedAccountIndex) ): Promise { - let overview: ParticipationOverview - if (accountIndex === get(selectedAccountIndex)) { - overview = get(participationOverview) - } else { - overview = await getParticipationOverview(accountIndex) - } - - const participations = overview?.participations?.[proposalId] ?? {} + const participations = (await getParticipationsForProposal(proposalId, accountIndex)) ?? {} const participationOutputs: TrackedParticipationOverview[] = Object.values(participations) return participationOutputs.some((output) => output?.endMilestoneIndex === 0) } From ac6877388daf585213da92f75842cda322aefe06 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Tue, 24 Jan 2023 15:30:37 +0100 Subject: [PATCH 06/15] fix: fix tests --- .../contexts/governance/utils/getParticipationsForProposal.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/shared/lib/contexts/governance/utils/getParticipationsForProposal.ts b/packages/shared/lib/contexts/governance/utils/getParticipationsForProposal.ts index 1ae7d459a4b..c48490c2f58 100644 --- a/packages/shared/lib/contexts/governance/utils/getParticipationsForProposal.ts +++ b/packages/shared/lib/contexts/governance/utils/getParticipationsForProposal.ts @@ -1,6 +1,6 @@ import { get } from 'svelte/store' -import type { OutputId, ParticipationOverview, TrackedParticipationOverview } from '@iota/wallet' +import type { ParticipationOverview, TrackedParticipationOverview } from '@iota/wallet' import { participationOverview } from '@contexts/governance/stores' import { getParticipationOverview, selectedAccountIndex } from '@core/account' @@ -8,7 +8,7 @@ import { getParticipationOverview, selectedAccountIndex } from '@core/account' export async function getParticipationsForProposal( proposalId: string, accountIndex = get(selectedAccountIndex) -): Promise<{ [outputId: OutputId]: TrackedParticipationOverview }> { +): Promise<{ [outputId: string]: TrackedParticipationOverview }> { let overview: ParticipationOverview if (accountIndex === get(selectedAccountIndex)) { overview = get(participationOverview) From 18cca415a8649de5692b7ad66497b6152d3ea4b2 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Wed, 25 Jan 2023 13:41:18 +0100 Subject: [PATCH 07/15] chore: create combined filter type --- packages/shared/components/filters/Filter.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/shared/components/filters/Filter.svelte b/packages/shared/components/filters/Filter.svelte index e25d3ff184c..be79f84d2df 100644 --- a/packages/shared/components/filters/Filter.svelte +++ b/packages/shared/components/filters/Filter.svelte @@ -5,9 +5,10 @@ import type { Writable } from 'svelte/store' import { ProposalFilter } from '@contexts/governance' - export let filterStore: Writable + type Filter = ActivityFilter | AssetFilter | ProposalFilter - let filter: ActivityFilter | AssetFilter | ProposalFilter = deepCopy($filterStore) + export let filterStore: Writable + let filter: Filter = deepCopy($filterStore) let filterActive = false let modal: Modal From d8b68f4ee3eceb5b98039b49e07b32b9ba46e952 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Wed, 25 Jan 2023 13:51:46 +0100 Subject: [PATCH 08/15] feat/ add proposal order to filter --- .../shared/lib/contexts/governance/enums/index.ts | 1 + .../governance/enums/proposal-order-option.enum.ts | 5 +++++ .../governance/stores/proposal-filter.store.ts | 12 ++++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 packages/shared/lib/contexts/governance/enums/proposal-order-option.enum.ts diff --git a/packages/shared/lib/contexts/governance/enums/index.ts b/packages/shared/lib/contexts/governance/enums/index.ts index ffcf5ed17a2..f2630b28cef 100644 --- a/packages/shared/lib/contexts/governance/enums/index.ts +++ b/packages/shared/lib/contexts/governance/enums/index.ts @@ -1,2 +1,3 @@ +export * from './proposal-order-option.enum' export * from './proposal-type.enum' export * from './proposal-status.enum' diff --git a/packages/shared/lib/contexts/governance/enums/proposal-order-option.enum.ts b/packages/shared/lib/contexts/governance/enums/proposal-order-option.enum.ts new file mode 100644 index 00000000000..2b51bdba631 --- /dev/null +++ b/packages/shared/lib/contexts/governance/enums/proposal-order-option.enum.ts @@ -0,0 +1,5 @@ +export enum ProposalOrderOption { + Date = 'date', + Phase = 'phase', + Name = 'name', +} diff --git a/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts b/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts index fc683d7e0d2..67b822d1dbe 100644 --- a/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts +++ b/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts @@ -1,6 +1,6 @@ -import { BooleanFilterOption } from '@core/utils/enums/filters' +import { BooleanFilterOption, OrderOption } from '@core/utils/enums/filters' import { writable, Writable } from 'svelte/store' -import { ProposalFilter, ProposalStatus, ProposalType } from '..' +import { ProposalFilter, ProposalStatus, ProposalType, ProposalOrderOption } from '..' export const proposalFilter: Writable = writable({ phase: { @@ -24,4 +24,12 @@ export const proposalFilter: Writable = writable({ selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], }, + order: { + active: false, + type: 'order', + localeKey: 'filters.proposalOrder', + selected: ProposalOrderOption.Date, + ascDesc: OrderOption.Asc, + choices: [ProposalOrderOption.Date, ProposalOrderOption.Phase, ProposalOrderOption.Name], + }, }) From 81a0f8b7504b720f61a5c24fae27751ee88bfeef Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Wed, 25 Jan 2023 15:49:44 +0100 Subject: [PATCH 09/15] enhancement: add translations for proposal order --- packages/shared/locales/en.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/shared/locales/en.json b/packages/shared/locales/en.json index 18d31e81271..8797be7ce18 100644 --- a/packages/shared/locales/en.json +++ b/packages/shared/locales/en.json @@ -1588,6 +1588,12 @@ "label": "Participated", "yes": "Yes", "no": "No" + }, + "proposalOrder": { + "label": "Order", + "date": "Date", + "name": "Name", + "phase": "Phase" } }, "dates": { From 9d3dedab1de4c88b25abfa8ebade1419e1d7301e Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Wed, 25 Jan 2023 17:18:01 +0100 Subject: [PATCH 10/15] enhancement: add labelkey to filter item --- packages/shared/components/filters/FilterItem.svelte | 2 +- .../governance/stores/proposal-filter.store.ts | 5 ++++- .../utils/interfaces/filter/filter-unit.interface.ts | 7 ++++++- .../wallet/stores/selected-account-activities.store.ts | 10 ++++++++++ .../wallet/stores/selected-account-assets.store.ts | 3 +++ packages/shared/locales/en.json | 6 +----- 6 files changed, 25 insertions(+), 8 deletions(-) diff --git a/packages/shared/components/filters/FilterItem.svelte b/packages/shared/components/filters/FilterItem.svelte index 8b1f9c5b772..eca94b0accc 100644 --- a/packages/shared/components/filters/FilterItem.svelte +++ b/packages/shared/components/filters/FilterItem.svelte @@ -24,7 +24,7 @@
= writable({ phase: { active: false, type: 'selection', - localeKey: 'filters.phase', + labelKey: 'filters.phase.label', + localeKey: 'pills.proposalStatus', selected: ProposalStatus.Commencing, choices: [ProposalStatus.Commencing, ProposalStatus.Upcoming, ProposalStatus.Holding, ProposalStatus.Ended], }, type: { active: false, type: 'selection', + labelKey: 'filters.proposalType.label', localeKey: 'filters.proposalType', selected: ProposalType.Official, choices: [ProposalType.Official, ProposalType.Custom], @@ -20,6 +22,7 @@ export const proposalFilter: Writable = writable({ participated: { active: false, type: 'selection', + labelKey: 'filters.participated.label', localeKey: 'filters.participated', selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], diff --git a/packages/shared/lib/core/utils/interfaces/filter/filter-unit.interface.ts b/packages/shared/lib/core/utils/interfaces/filter/filter-unit.interface.ts index dcb6b863bdb..ebb55efb78f 100644 --- a/packages/shared/lib/core/utils/interfaces/filter/filter-unit.interface.ts +++ b/packages/shared/lib/core/utils/interfaces/filter/filter-unit.interface.ts @@ -7,7 +7,7 @@ export type FilterUnit = SelectionFilterUnit | NumberFilterUnit | AssetFilterUni export type BooleanFilterUnit = { type: 'boolean' active: boolean - localeKey: string + labelKey: string } export type SelectionFilterUnit = { @@ -15,6 +15,7 @@ export type SelectionFilterUnit = { active: boolean choices: string[] selected: string + labelKey: string localeKey: string } @@ -24,6 +25,7 @@ export type OrderFilterUnit = { choices: string[] ascDesc: OrderOption.Asc selected: string + labelKey: string localeKey: string } @@ -32,6 +34,7 @@ export type DateFilterUnit = { active: boolean choices: DateFilterOption[] selected: DateFilterOption + labelKey: string localeKey: string subunit: DateFilterInput } @@ -39,6 +42,7 @@ export type DateFilterUnit = { export type NumberFilterUnit = { type: 'number' active: boolean + labelKey: string localeKey: string selected: NumberFilterOption choices: NumberFilterOption[] @@ -48,6 +52,7 @@ export type NumberFilterUnit = { export type AssetFilterUnit = { type: 'asset' active: boolean + labelKey: string localeKey: string selected: string } diff --git a/packages/shared/lib/core/wallet/stores/selected-account-activities.store.ts b/packages/shared/lib/core/wallet/stores/selected-account-activities.store.ts index 15e876e1e9d..d72d016665d 100644 --- a/packages/shared/lib/core/wallet/stores/selected-account-activities.store.ts +++ b/packages/shared/lib/core/wallet/stores/selected-account-activities.store.ts @@ -31,6 +31,7 @@ export const activityFilter: Writable = writable({ amount: { type: 'number', active: false, + labelKey: 'filters.amount.label', localeKey: 'filters.amount', selected: NumberFilterOption.Equal, choices: Object.values(NumberFilterOption), @@ -42,12 +43,14 @@ export const activityFilter: Writable = writable({ asset: { active: false, type: 'asset', + labelKey: 'filters.asset.label', localeKey: 'filters.asset', selected: '', }, status: { active: false, type: 'selection', + labelKey: 'filters.status.label', localeKey: 'filters.status', selected: StatusFilterOption.Confirmed, choices: [ @@ -60,6 +63,7 @@ export const activityFilter: Writable = writable({ type: { active: false, type: 'selection', + labelKey: 'filters.type.label', localeKey: 'filters.type', selected: ActivityType.Basic, choices: [ActivityType.Basic, ActivityType.Nft, ActivityType.Foundry, ActivityType.Alias], @@ -67,6 +71,7 @@ export const activityFilter: Writable = writable({ direction: { active: false, type: 'selection', + labelKey: 'filters.direction.label', localeKey: 'filters.direction', selected: ActivityDirection.Incoming, choices: [ActivityDirection.Incoming, ActivityDirection.Outgoing, ActivityDirection.SelfTransaction], @@ -74,6 +79,7 @@ export const activityFilter: Writable = writable({ internalExternal: { active: false, type: 'selection', + labelKey: 'filters.internalExternal.label', localeKey: 'filters.internalExternal', selected: InternalExternalOption.External, choices: [InternalExternalOption.External, InternalExternalOption.Internal], @@ -81,6 +87,7 @@ export const activityFilter: Writable = writable({ date: { active: false, type: 'date', + labelKey: 'filters.date.label', localeKey: 'filters.date', selected: DateFilterOption.Equals, choices: Object.values(DateFilterOption), @@ -92,6 +99,7 @@ export const activityFilter: Writable = writable({ showRejected: { active: false, type: 'selection', + labelKey: 'filters.showRejected.label', localeKey: 'filters.showRejected', selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], @@ -99,6 +107,7 @@ export const activityFilter: Writable = writable({ showHidden: { active: false, type: 'selection', + labelKey: 'filters.showHidden.label', localeKey: 'filters.showHidden', selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], @@ -106,6 +115,7 @@ export const activityFilter: Writable = writable({ showValueless: { active: false, type: 'selection', + labelKey: 'filters.showValueless.label', localeKey: 'filters.showValueless', selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], diff --git a/packages/shared/lib/core/wallet/stores/selected-account-assets.store.ts b/packages/shared/lib/core/wallet/stores/selected-account-assets.store.ts index 9bd602e7ad0..ede2990d3a8 100644 --- a/packages/shared/lib/core/wallet/stores/selected-account-assets.store.ts +++ b/packages/shared/lib/core/wallet/stores/selected-account-assets.store.ts @@ -13,6 +13,7 @@ export const assetFilter: Writable = writable({ verificationStatus: { active: false, type: 'selection', + labelKey: 'filters.verificationStatus.label', localeKey: 'filters.verificationStatus', selected: 'new', choices: Object.values(NotVerifiedStatus) @@ -22,6 +23,7 @@ export const assetFilter: Writable = writable({ showHidden: { active: false, type: 'selection', + labelKey: 'filters.showHidden.label', localeKey: 'filters.showHidden', selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], @@ -29,6 +31,7 @@ export const assetFilter: Writable = writable({ order: { active: false, type: 'order', + labelKey: 'filters.assetOrder.label', localeKey: 'filters.assetOrder', selected: AssetOrderOption.Name, ascDesc: OrderOption.Asc, diff --git a/packages/shared/locales/en.json b/packages/shared/locales/en.json index 18d31e81271..74a6c3147b8 100644 --- a/packages/shared/locales/en.json +++ b/packages/shared/locales/en.json @@ -1578,11 +1578,7 @@ "custom": "Custom" }, "phase": { - "label": "Phase", - "upcoming": "Announcement", - "commencing": "Voting open", - "holding": "Counting starts", - "ended": "Counting stops" + "label": "Phase" }, "participated": { "label": "Participated", From 0b4e0710ede5a9f9e5a1ffe98115f84aad68a92c Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Wed, 25 Jan 2023 17:41:55 +0100 Subject: [PATCH 11/15] fix: fix merge conflicts --- .../lib/contexts/governance/stores/proposal-filter.store.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts b/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts index 0b441ab0cc2..349e0cc7d51 100644 --- a/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts +++ b/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts @@ -30,6 +30,7 @@ export const proposalFilter: Writable = writable({ order: { active: false, type: 'order', + labelKey: 'filters.proposalOrder.label', localeKey: 'filters.proposalOrder', selected: ProposalOrderOption.Date, ascDesc: OrderOption.Asc, From a55aef09528bacb877f3145ee374ca51357a1122 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Wed, 25 Jan 2023 18:07:20 +0100 Subject: [PATCH 12/15] chore: make label key optional --- packages/shared/components/filters/FilterItem.svelte | 2 +- .../governance/stores/proposal-filter.store.ts | 2 -- .../utils/interfaces/filter/filter-unit.interface.ts | 12 ++++++------ .../stores/selected-account-activities.store.ts | 10 ---------- .../wallet/stores/selected-account-assets.store.ts | 3 --- 5 files changed, 7 insertions(+), 22 deletions(-) diff --git a/packages/shared/components/filters/FilterItem.svelte b/packages/shared/components/filters/FilterItem.svelte index eca94b0accc..41c89c65a1a 100644 --- a/packages/shared/components/filters/FilterItem.svelte +++ b/packages/shared/components/filters/FilterItem.svelte @@ -24,7 +24,7 @@
= writable({ type: { active: false, type: 'selection', - labelKey: 'filters.proposalType.label', localeKey: 'filters.proposalType', selected: ProposalType.Official, choices: [ProposalType.Official, ProposalType.Custom], @@ -22,7 +21,6 @@ export const proposalFilter: Writable = writable({ participated: { active: false, type: 'selection', - labelKey: 'filters.participated.label', localeKey: 'filters.participated', selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], diff --git a/packages/shared/lib/core/utils/interfaces/filter/filter-unit.interface.ts b/packages/shared/lib/core/utils/interfaces/filter/filter-unit.interface.ts index ebb55efb78f..7e2ada92871 100644 --- a/packages/shared/lib/core/utils/interfaces/filter/filter-unit.interface.ts +++ b/packages/shared/lib/core/utils/interfaces/filter/filter-unit.interface.ts @@ -7,7 +7,7 @@ export type FilterUnit = SelectionFilterUnit | NumberFilterUnit | AssetFilterUni export type BooleanFilterUnit = { type: 'boolean' active: boolean - labelKey: string + localeKey: string } export type SelectionFilterUnit = { @@ -15,7 +15,7 @@ export type SelectionFilterUnit = { active: boolean choices: string[] selected: string - labelKey: string + labelKey?: string localeKey: string } @@ -25,7 +25,7 @@ export type OrderFilterUnit = { choices: string[] ascDesc: OrderOption.Asc selected: string - labelKey: string + labelKey?: string localeKey: string } @@ -34,7 +34,7 @@ export type DateFilterUnit = { active: boolean choices: DateFilterOption[] selected: DateFilterOption - labelKey: string + labelKey?: string localeKey: string subunit: DateFilterInput } @@ -42,7 +42,7 @@ export type DateFilterUnit = { export type NumberFilterUnit = { type: 'number' active: boolean - labelKey: string + labelKey?: string localeKey: string selected: NumberFilterOption choices: NumberFilterOption[] @@ -52,7 +52,7 @@ export type NumberFilterUnit = { export type AssetFilterUnit = { type: 'asset' active: boolean - labelKey: string + labelKey?: string localeKey: string selected: string } diff --git a/packages/shared/lib/core/wallet/stores/selected-account-activities.store.ts b/packages/shared/lib/core/wallet/stores/selected-account-activities.store.ts index d72d016665d..15e876e1e9d 100644 --- a/packages/shared/lib/core/wallet/stores/selected-account-activities.store.ts +++ b/packages/shared/lib/core/wallet/stores/selected-account-activities.store.ts @@ -31,7 +31,6 @@ export const activityFilter: Writable = writable({ amount: { type: 'number', active: false, - labelKey: 'filters.amount.label', localeKey: 'filters.amount', selected: NumberFilterOption.Equal, choices: Object.values(NumberFilterOption), @@ -43,14 +42,12 @@ export const activityFilter: Writable = writable({ asset: { active: false, type: 'asset', - labelKey: 'filters.asset.label', localeKey: 'filters.asset', selected: '', }, status: { active: false, type: 'selection', - labelKey: 'filters.status.label', localeKey: 'filters.status', selected: StatusFilterOption.Confirmed, choices: [ @@ -63,7 +60,6 @@ export const activityFilter: Writable = writable({ type: { active: false, type: 'selection', - labelKey: 'filters.type.label', localeKey: 'filters.type', selected: ActivityType.Basic, choices: [ActivityType.Basic, ActivityType.Nft, ActivityType.Foundry, ActivityType.Alias], @@ -71,7 +67,6 @@ export const activityFilter: Writable = writable({ direction: { active: false, type: 'selection', - labelKey: 'filters.direction.label', localeKey: 'filters.direction', selected: ActivityDirection.Incoming, choices: [ActivityDirection.Incoming, ActivityDirection.Outgoing, ActivityDirection.SelfTransaction], @@ -79,7 +74,6 @@ export const activityFilter: Writable = writable({ internalExternal: { active: false, type: 'selection', - labelKey: 'filters.internalExternal.label', localeKey: 'filters.internalExternal', selected: InternalExternalOption.External, choices: [InternalExternalOption.External, InternalExternalOption.Internal], @@ -87,7 +81,6 @@ export const activityFilter: Writable = writable({ date: { active: false, type: 'date', - labelKey: 'filters.date.label', localeKey: 'filters.date', selected: DateFilterOption.Equals, choices: Object.values(DateFilterOption), @@ -99,7 +92,6 @@ export const activityFilter: Writable = writable({ showRejected: { active: false, type: 'selection', - labelKey: 'filters.showRejected.label', localeKey: 'filters.showRejected', selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], @@ -107,7 +99,6 @@ export const activityFilter: Writable = writable({ showHidden: { active: false, type: 'selection', - labelKey: 'filters.showHidden.label', localeKey: 'filters.showHidden', selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], @@ -115,7 +106,6 @@ export const activityFilter: Writable = writable({ showValueless: { active: false, type: 'selection', - labelKey: 'filters.showValueless.label', localeKey: 'filters.showValueless', selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], diff --git a/packages/shared/lib/core/wallet/stores/selected-account-assets.store.ts b/packages/shared/lib/core/wallet/stores/selected-account-assets.store.ts index ede2990d3a8..9bd602e7ad0 100644 --- a/packages/shared/lib/core/wallet/stores/selected-account-assets.store.ts +++ b/packages/shared/lib/core/wallet/stores/selected-account-assets.store.ts @@ -13,7 +13,6 @@ export const assetFilter: Writable = writable({ verificationStatus: { active: false, type: 'selection', - labelKey: 'filters.verificationStatus.label', localeKey: 'filters.verificationStatus', selected: 'new', choices: Object.values(NotVerifiedStatus) @@ -23,7 +22,6 @@ export const assetFilter: Writable = writable({ showHidden: { active: false, type: 'selection', - labelKey: 'filters.showHidden.label', localeKey: 'filters.showHidden', selected: BooleanFilterOption.Yes, choices: [BooleanFilterOption.Yes, BooleanFilterOption.No], @@ -31,7 +29,6 @@ export const assetFilter: Writable = writable({ order: { active: false, type: 'order', - labelKey: 'filters.assetOrder.label', localeKey: 'filters.assetOrder', selected: AssetOrderOption.Name, ascDesc: OrderOption.Asc, From fcb59cd8a80bda9b6477302afc76bf5ffb6b4e69 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Thu, 26 Jan 2023 09:13:12 +0100 Subject: [PATCH 13/15] feat: add sorting logic --- packages/shared/components/Proposals.svelte | 6 +-- .../interfaces/proposal-filter.interface.ts | 3 +- .../stores/proposal-filter.store.ts | 1 - .../governance/utils/sortProposals.ts | 44 +++++++++++++++++++ 4 files changed, 49 insertions(+), 5 deletions(-) create mode 100644 packages/shared/lib/contexts/governance/utils/sortProposals.ts diff --git a/packages/shared/components/Proposals.svelte b/packages/shared/components/Proposals.svelte index 9dcec471e5d..f8cae04fbc7 100644 --- a/packages/shared/components/Proposals.svelte +++ b/packages/shared/components/Proposals.svelte @@ -5,12 +5,12 @@ import { IProposal } from '@contexts/governance/interfaces' import { proposalFilter } from '@contexts/governance' import { isVisibleProposal } from '@contexts/governance/utils/isVisibleProposal' + import { sortProposals } from '@contexts/governance/utils/sortProposals' export let proposals: IProposal[] = [] - $: sortedProposals = proposals - .filter((proposal) => isVisibleProposal(proposal, $proposalFilter)) - .sort((a, b) => (a.id < b.id ? -1 : 1)) + $: visibleProposals = proposals.filter((proposal) => isVisibleProposal(proposal, $proposalFilter)) + $: sortedProposals = sortProposals(visibleProposals, $proposalFilter) diff --git a/packages/shared/lib/contexts/governance/interfaces/proposal-filter.interface.ts b/packages/shared/lib/contexts/governance/interfaces/proposal-filter.interface.ts index 8b6a5184588..487b2009590 100644 --- a/packages/shared/lib/contexts/governance/interfaces/proposal-filter.interface.ts +++ b/packages/shared/lib/contexts/governance/interfaces/proposal-filter.interface.ts @@ -1,7 +1,8 @@ -import { SelectionFilterUnit } from '@core/utils/interfaces/filter/filter-unit.interface' +import { OrderFilterUnit, SelectionFilterUnit } from '@core/utils/interfaces/filter/filter-unit.interface' export interface ProposalFilter { phase: SelectionFilterUnit type: SelectionFilterUnit participated: SelectionFilterUnit + order: OrderFilterUnit } diff --git a/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts b/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts index da616192951..473c225e3a1 100644 --- a/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts +++ b/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts @@ -28,7 +28,6 @@ export const proposalFilter: Writable = writable({ order: { active: false, type: 'order', - labelKey: 'filters.proposalOrder.label', localeKey: 'filters.proposalOrder', selected: ProposalOrderOption.Date, ascDesc: OrderOption.Asc, diff --git a/packages/shared/lib/contexts/governance/utils/sortProposals.ts b/packages/shared/lib/contexts/governance/utils/sortProposals.ts new file mode 100644 index 00000000000..c34cdfab554 --- /dev/null +++ b/packages/shared/lib/contexts/governance/utils/sortProposals.ts @@ -0,0 +1,44 @@ +import { OrderOption } from '@core/utils/enums/filters' +import { ProposalOrderOption, ProposalStatus } from '../enums' +import { IProposal, ProposalFilter } from '../interfaces' + +export function sortProposals(proposals: IProposal[], filter: ProposalFilter): IProposal[] { + let orderFunction = sortByName + let isAscending = true + + if (filter.order.active) { + switch (filter.order.selected) { + case ProposalOrderOption.Name: + orderFunction = sortByName + break + case ProposalOrderOption.Phase: + orderFunction = sortByPhase + break + case ProposalOrderOption.Date: + orderFunction = sortByDate + break + } + isAscending = filter.order.ascDesc === OrderOption.Asc + } + + return proposals?.sort((proposal1, propsal2) => orderFunction(proposal1, propsal2, isAscending)) ?? [] +} + +function sortByName(proposal1: IProposal, proposal2: IProposal, asc: boolean): number { + return proposal1.title.toLowerCase() > proposal2.title.toLowerCase() ? (asc ? 1 : -1) : asc ? -1 : 1 +} + +function sortByPhase(proposal1: IProposal, proposal2: IProposal, asc: boolean): number { + const phaseOrdering = { + [ProposalStatus.Upcoming]: 0, + [ProposalStatus.Commencing]: 1, + [ProposalStatus.Holding]: 2, + [ProposalStatus.Ended]: 3, + } + return phaseOrdering[proposal1.status] > phaseOrdering[proposal2.status] ? (asc ? 1 : -1) : asc ? -1 : 1 +} + +// TODO: Define what `date` means +function sortByDate(proposal1: IProposal, proposal2: IProposal, asc: boolean): number { + return proposal1.title.toLowerCase() > proposal2.title.toLowerCase() ? (asc ? 1 : -1) : asc ? -1 : 1 +} From c15e09abf11c4425e29483b5e72f252110562981 Mon Sep 17 00:00:00 2001 From: Mark Nardi Date: Thu, 26 Jan 2023 16:24:13 +0100 Subject: [PATCH 14/15] chore: remove sorting by date --- .../governance/enums/proposal-order-option.enum.ts | 1 - .../contexts/governance/stores/proposal-filter.store.ts | 4 ++-- .../shared/lib/contexts/governance/utils/sortProposals.ts | 8 -------- packages/shared/locales/en.json | 1 - 4 files changed, 2 insertions(+), 12 deletions(-) diff --git a/packages/shared/lib/contexts/governance/enums/proposal-order-option.enum.ts b/packages/shared/lib/contexts/governance/enums/proposal-order-option.enum.ts index 2b51bdba631..7e3a7e71f91 100644 --- a/packages/shared/lib/contexts/governance/enums/proposal-order-option.enum.ts +++ b/packages/shared/lib/contexts/governance/enums/proposal-order-option.enum.ts @@ -1,5 +1,4 @@ export enum ProposalOrderOption { - Date = 'date', Phase = 'phase', Name = 'name', } diff --git a/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts b/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts index 473c225e3a1..f475e1c44a6 100644 --- a/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts +++ b/packages/shared/lib/contexts/governance/stores/proposal-filter.store.ts @@ -29,8 +29,8 @@ export const proposalFilter: Writable = writable({ active: false, type: 'order', localeKey: 'filters.proposalOrder', - selected: ProposalOrderOption.Date, + selected: ProposalOrderOption.Name, ascDesc: OrderOption.Asc, - choices: [ProposalOrderOption.Date, ProposalOrderOption.Phase, ProposalOrderOption.Name], + choices: [ProposalOrderOption.Name, ProposalOrderOption.Phase], }, }) diff --git a/packages/shared/lib/contexts/governance/utils/sortProposals.ts b/packages/shared/lib/contexts/governance/utils/sortProposals.ts index c34cdfab554..04a6b39bb41 100644 --- a/packages/shared/lib/contexts/governance/utils/sortProposals.ts +++ b/packages/shared/lib/contexts/governance/utils/sortProposals.ts @@ -14,9 +14,6 @@ export function sortProposals(proposals: IProposal[], filter: ProposalFilter): I case ProposalOrderOption.Phase: orderFunction = sortByPhase break - case ProposalOrderOption.Date: - orderFunction = sortByDate - break } isAscending = filter.order.ascDesc === OrderOption.Asc } @@ -37,8 +34,3 @@ function sortByPhase(proposal1: IProposal, proposal2: IProposal, asc: boolean): } return phaseOrdering[proposal1.status] > phaseOrdering[proposal2.status] ? (asc ? 1 : -1) : asc ? -1 : 1 } - -// TODO: Define what `date` means -function sortByDate(proposal1: IProposal, proposal2: IProposal, asc: boolean): number { - return proposal1.title.toLowerCase() > proposal2.title.toLowerCase() ? (asc ? 1 : -1) : asc ? -1 : 1 -} diff --git a/packages/shared/locales/en.json b/packages/shared/locales/en.json index 7de6b5376f8..2c407dbf19c 100644 --- a/packages/shared/locales/en.json +++ b/packages/shared/locales/en.json @@ -1587,7 +1587,6 @@ }, "proposalOrder": { "label": "Order", - "date": "Date", "name": "Name", "phase": "Phase" } From 7e44dce92474fa1670065b07b1744a5513d1954f Mon Sep 17 00:00:00 2001 From: Jean Ribeiro Date: Thu, 26 Jan 2023 21:54:57 -0300 Subject: [PATCH 15/15] coding convention fixes --- packages/shared/components/Proposals.svelte | 5 ++--- packages/shared/lib/contexts/governance/enums/index.ts | 2 +- packages/shared/lib/contexts/governance/utils/index.ts | 2 ++ .../shared/lib/contexts/governance/utils/sortProposals.ts | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/shared/components/Proposals.svelte b/packages/shared/components/Proposals.svelte index f8cae04fbc7..8d1334af29e 100644 --- a/packages/shared/components/Proposals.svelte +++ b/packages/shared/components/Proposals.svelte @@ -3,9 +3,8 @@ import { localize } from '@core/i18n' import { FontWeight } from './enums' import { IProposal } from '@contexts/governance/interfaces' - import { proposalFilter } from '@contexts/governance' - import { isVisibleProposal } from '@contexts/governance/utils/isVisibleProposal' - import { sortProposals } from '@contexts/governance/utils/sortProposals' + import { proposalFilter } from '@contexts/governance/stores' + import { isVisibleProposal, sortProposals } from '@contexts/governance/utils' export let proposals: IProposal[] = [] diff --git a/packages/shared/lib/contexts/governance/enums/index.ts b/packages/shared/lib/contexts/governance/enums/index.ts index f2630b28cef..14f458457a2 100644 --- a/packages/shared/lib/contexts/governance/enums/index.ts +++ b/packages/shared/lib/contexts/governance/enums/index.ts @@ -1,3 +1,3 @@ export * from './proposal-order-option.enum' -export * from './proposal-type.enum' export * from './proposal-status.enum' +export * from './proposal-type.enum' diff --git a/packages/shared/lib/contexts/governance/utils/index.ts b/packages/shared/lib/contexts/governance/utils/index.ts index 3420c7f2852..b4bd00a5d1b 100644 --- a/packages/shared/lib/contexts/governance/utils/index.ts +++ b/packages/shared/lib/contexts/governance/utils/index.ts @@ -11,5 +11,7 @@ export * from './isProposalActive' export * from './isProposalAlreadyAdded' export * from './isSelectedAccountVoting' export * from './isValidProposalId' +export * from './isVisibleProposal' export * from './isVotingForProposal' export * from './isVotingForSelectedProposal' +export * from './sortProposals' diff --git a/packages/shared/lib/contexts/governance/utils/sortProposals.ts b/packages/shared/lib/contexts/governance/utils/sortProposals.ts index 04a6b39bb41..9fc4c759e75 100644 --- a/packages/shared/lib/contexts/governance/utils/sortProposals.ts +++ b/packages/shared/lib/contexts/governance/utils/sortProposals.ts @@ -18,7 +18,7 @@ export function sortProposals(proposals: IProposal[], filter: ProposalFilter): I isAscending = filter.order.ascDesc === OrderOption.Asc } - return proposals?.sort((proposal1, propsal2) => orderFunction(proposal1, propsal2, isAscending)) ?? [] + return proposals?.sort((proposal1, proposal2) => orderFunction(proposal1, proposal2, isAscending)) ?? [] } function sortByName(proposal1: IProposal, proposal2: IProposal, asc: boolean): number {