Skip to content

Commit 32075dd

Browse files
authored
feat(Spoolman): show currency for price field (#1584)
Signed-off-by: Pedro Lamas <[email protected]>
1 parent b219f47 commit 32075dd

File tree

6 files changed

+69
-11
lines changed

6 files changed

+69
-11
lines changed

src/api/socketActions.ts

+13
Original file line numberDiff line numberDiff line change
@@ -808,5 +808,18 @@ export const SocketActions = {
808808
dispatch: 'spoolman/onAvailableSpools'
809809
}
810810
)
811+
},
812+
813+
async serverSpoolmanProxyGetSettingCurrency () {
814+
baseEmit(
815+
'server.spoolman.proxy', {
816+
params: {
817+
request_method: 'GET',
818+
path: '/v1/setting/currency',
819+
use_v2_response: true
820+
},
821+
dispatch: 'spoolman/onSettingCurrency'
822+
}
823+
)
811824
}
812825
}

src/components/widgets/spoolman/SpoolmanCard.vue

+36-11
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,10 @@ export default class SpoolmanCard extends Mixins(StateMixin) {
219219
return this.$store.getters['spoolman/getActiveSpool']
220220
}
221221
222+
get currency (): string | undefined {
223+
return this.$store.state.spoolman.currency
224+
}
225+
222226
get isConnected (): boolean {
223227
return this.$store.state.spoolman.connected
224228
}
@@ -251,17 +255,38 @@ export default class SpoolmanCard extends Mixins(StateMixin) {
251255
if (!this.activeSpool) return '-'
252256
253257
switch (field) {
254-
case 'vendor': return this.activeSpool.filament.vendor?.name || '-'
255-
case 'filament_name': return this.activeSpool.filament.name
256-
case 'material': return this.activeSpool.filament.material || '-'
257-
case 'first_used': return this.activeSpool.first_used ? this.$filters.formatRelativeTimeToNow(this.activeSpool.first_used) : this.$tc('app.setting.label.never')
258-
case 'last_used': return this.activeSpool.last_used ? this.$filters.formatRelativeTimeToNow(this.activeSpool.last_used) : this.$tc('app.setting.label.never')
259-
case 'price': return this.activeSpool.filament.price || '-'
260-
case 'density': return this.activeSpool.filament.density || '-'
261-
case 'extruder_temp': return this.activeSpool.filament.settings_extruder_temp || '-'
262-
case 'bed_temp': return this.activeSpool.filament.settings_bed_temp || '-'
263-
264-
default: return this.activeSpool[field as keyof Spool] || '-'
258+
case 'vendor':
259+
return this.activeSpool.filament.vendor?.name || '-'
260+
261+
case 'filament_name':
262+
return this.activeSpool.filament.name
263+
264+
case 'material':
265+
return this.activeSpool.filament.material || '-'
266+
267+
case 'first_used':
268+
return this.activeSpool.first_used ? this.$filters.formatRelativeTimeToNow(this.activeSpool.first_used) : this.$tc('app.setting.label.never')
269+
270+
case 'last_used':
271+
return this.activeSpool.last_used ? this.$filters.formatRelativeTimeToNow(this.activeSpool.last_used) : this.$tc('app.setting.label.never')
272+
273+
case 'price':
274+
return [
275+
this.activeSpool.filament.price?.toFixed(2),
276+
this.currency
277+
].filter(x => x != null).join(' ') || '-'
278+
279+
case 'density':
280+
return this.activeSpool.filament.density || '-'
281+
282+
case 'extruder_temp':
283+
return this.activeSpool.filament.settings_extruder_temp || '-'
284+
285+
case 'bed_temp':
286+
return this.activeSpool.filament.settings_bed_temp || '-'
287+
288+
default:
289+
return this.activeSpool[field as keyof Spool] || '-'
265290
}
266291
}
267292
}

src/store/spoolman/actions.ts

+14
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export const actions: ActionTree<SpoolmanState, RootState> = {
2929
async init () {
3030
SocketActions.serverSpoolmanGetSpoolId()
3131
SocketActions.serverSpoolmanProxyGetAvailableSpools()
32+
SocketActions.serverSpoolmanProxyGetSettingCurrency()
3233
},
3334

3435
async onActiveSpool ({ commit }, payload) {
@@ -132,6 +133,19 @@ export const actions: ActionTree<SpoolmanState, RootState> = {
132133
} else commit('setConnected', payload)
133134
},
134135

136+
async onSettingCurrency ({ commit }, payload: SpoolmanProxyResponse<{ value: string }>) {
137+
if ('error' in payload && 'response' in payload) {
138+
if (payload.error != null) {
139+
EventBus.$emit(typeof payload.error === 'string' ? payload.error : payload.error.message, { type: 'error' })
140+
return
141+
}
142+
143+
payload = payload.response
144+
}
145+
146+
commit('setCurrency', payload)
147+
},
148+
135149
async initializeWebsocketConnection ({ state, rootState, dispatch }) {
136150
if (rootState.server.config.spoolman?.server) {
137151
if (state.socket?.readyState === WebSocket.OPEN) {

src/store/spoolman/mutations.ts

+4
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,10 @@ export const mutations: MutationTree<SpoolmanState> = {
3232
state.dialog = payload
3333
},
3434

35+
setCurrency (state, payload: { value: string }) {
36+
state.currency = payload.value.replace(/^"|"$/g, '')
37+
},
38+
3539
setConnected (state, payload) {
3640
state.connected = payload
3741
}

src/store/spoolman/state.ts

+1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const defaultState = (): SpoolmanState => {
44
return {
55
availableSpools: [],
66
activeSpool: undefined,
7+
currency: undefined,
78
connected: false,
89
dialog: {
910
show: false

src/store/spoolman/types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ export interface Spool {
4646
export interface SpoolmanState {
4747
availableSpools: Spool[];
4848
activeSpool?: number;
49+
currency?: string;
4950
connected: boolean;
5051
dialog: SpoolSelectionDialogState;
5152
socket?: WebSocket;

0 commit comments

Comments
 (0)