diff --git a/client/src/components/instruments/FilterEntry.vue b/client/src/components/instruments/FilterEntry.vue index 285fb13e..9b6cbc6f 100644 --- a/client/src/components/instruments/FilterEntry.vue +++ b/client/src/components/instruments/FilterEntry.vue @@ -3,13 +3,17 @@ :class="typeClass" class="filter-entry"> {{ text }} - + + + + @@ -46,6 +88,7 @@ .filter-group { border-bottom: 1px solid $color-silver; + padding: $medium-spacing 0; display: flex; flex-direction: column; diff --git a/client/src/components/instruments/InstrumentFilter.vue b/client/src/components/instruments/InstrumentFilter.vue index 49e346e6..c7381d28 100644 --- a/client/src/components/instruments/InstrumentFilter.vue +++ b/client/src/components/instruments/InstrumentFilter.vue @@ -3,33 +3,28 @@ + /> + /> + /> diff --git a/client/src/graphql/client.js b/client/src/graphql/client.js index 2bfabfc8..ede1035c 100644 --- a/client/src/graphql/client.js +++ b/client/src/graphql/client.js @@ -24,6 +24,10 @@ const writeLocalCache = cache => { __typename: 'HelloEmail', email: '', }, + instrumentFilter: { + __typename: 'InstrumentFilter', + currentFilter: 'abc' + } }, }); }; diff --git a/client/src/graphql/gql/local/instrumentFiler.gql b/client/src/graphql/gql/local/instrumentFiler.gql new file mode 100644 index 00000000..fe00a4be --- /dev/null +++ b/client/src/graphql/gql/local/instrumentFiler.gql @@ -0,0 +1,5 @@ +query InstrumentFilter { + instrumentFilter @client { + currentFilter + } +} diff --git a/client/src/graphql/gql/local/mutations/setInstrumentFilter.gql b/client/src/graphql/gql/local/mutations/setInstrumentFilter.gql new file mode 100644 index 00000000..bfc35931 --- /dev/null +++ b/client/src/graphql/gql/local/mutations/setInstrumentFilter.gql @@ -0,0 +1,3 @@ +mutation($filter: String!) { + setInstrumentFilter(filter: $filter) @client +} diff --git a/client/src/graphql/resolvers.js b/client/src/graphql/resolvers.js index 2dd4abeb..2d0c2620 100644 --- a/client/src/graphql/resolvers.js +++ b/client/src/graphql/resolvers.js @@ -1,6 +1,7 @@ import SCROLL_POSITION from '@/graphql/gql/local/scrollPosition.gql'; import HELLO_EMAIL from '@/graphql/gql/local/helloEmail.gql'; import SIDEBAR from '@/graphql/gql/local/sidebar.gql'; +import INSTRUMENT_FILTER from '@/graphql/gql/local/instrumentFiler.gql'; export const resolvers = { Mutation: { @@ -16,6 +17,12 @@ export const resolvers = { cache.writeQuery({query: HELLO_EMAIL, data}); return data.helloEmail; }, + setInstrumentFilter: (_, {filter}, {cache}) => { + const data = cache.readQuery({query: INSTRUMENT_FILTER}); + data.instrumentFilter.currentFilter = filter; + cache.writeQuery({query: INSTRUMENT_FILTER, data}); + return data.instrumentFilter; + }, toggleSidebar: (_, {sidebar: {profile, navigation}}, {cache}) => { const data = cache.readQuery({query: SIDEBAR}); if (typeof profile !== 'undefined') { @@ -26,6 +33,6 @@ export const resolvers = { } cache.writeQuery({query: SIDEBAR, data}); return data.sidebar; - } - } + }, + }, }; diff --git a/client/src/graphql/typedefs.js b/client/src/graphql/typedefs.js index ecad752c..9528fc5e 100644 --- a/client/src/graphql/typedefs.js +++ b/client/src/graphql/typedefs.js @@ -19,6 +19,10 @@ export const typeDefs = gql` profile: Boolean } + type InstrumentFilter { + currentFilter: String! + } + type Mutation { scrollTo(scrollTo: String!): ScrollPosition helloEmail(email: String!): HelloEmail diff --git a/client/src/pages/instrumentOverview.vue b/client/src/pages/instrumentOverview.vue index cd4928ed..a339e23b 100644 --- a/client/src/pages/instrumentOverview.vue +++ b/client/src/pages/instrumentOverview.vue @@ -21,10 +21,12 @@ import InstrumentEntry from '@/components/instruments/InstrumentEntry'; import INSTRUMENTS_QUERY from '@/graphql/gql/queries/instrumentsQuery.gql'; + import INSTRUMENT_FILTER_QUERY from 'gql/local/instrumentFiler.gql'; + export default { components: { InstrumentFilter, - InstrumentEntry + InstrumentEntry, }, apollo: { @@ -32,27 +34,43 @@ query: INSTRUMENTS_QUERY, update(data) { return this.$getRidOfEdges(data).instruments; - } - } + }, + }, + instrumentFilter: { + query: INSTRUMENT_FILTER_QUERY, + update({instrumentFilter}) { + const {currentFilter} = instrumentFilter; + if (currentFilter && currentFilter.indexOf(':') > -1) { + const [filterType, identifier] = currentFilter.split(':'); + this.filter = i => i.type[filterType] === identifier; + } else { + this.filter = i => i; // identity + } + return instrumentFilter; + }, + }, }, data() { return { instruments: [], - filter: i => i + filter: i => i, // identity + instrumentFilter: { + currentFilter: '', + }, }; }, computed: { filteredInstruments() { return this.instruments.filter(i => this.filter(i)); - } + }, }, methods: { updateFilter(filter) { this.filter = filter; - } + }, }, };