75 lines
1.7 KiB
TypeScript
Raw Normal View History

2021-02-04 23:05:46 -08:00
import { createSlice, PayloadAction } from '@reduxjs/toolkit';
2021-02-03 14:27:32 -08:00
import Client from '../client';
2021-02-01 22:15:32 -08:00
import MockClient from '../client/mock-client';
2021-02-03 14:27:32 -08:00
import RestClient from '../client/rest-client';
2020-12-25 21:39:54 -08:00
2021-02-03 14:27:32 -08:00
interface ConfigInfo {
apiBaseUrl: string
2020-12-25 21:39:54 -08:00
}
2021-02-03 14:27:32 -08:00
class RutimeConfig {
private config: ConfigInfo;
constructor() {
}
load() {
// Config can be inserted in the html page to define the global properties ...
this.config = (window as any).serverconfig;
return this;
}
buildClient(): Client {
let result: Client;
if (this.config) {
2021-02-04 23:05:46 -08:00
result = new RestClient(this.config.apiBaseUrl, () => { sessionExpired() });
2021-02-03 14:27:32 -08:00
console.log("Service using rest client. " + JSON.stringify(this.config))
} else {
console.log("Warning:Service using mockservice client")
result = new MockClient();
2020-12-25 21:39:54 -08:00
}
2021-02-03 14:27:32 -08:00
return result;
2020-12-25 21:39:54 -08:00
}
}
2021-02-04 23:05:46 -08:00
export interface ClientStatus {
state: 'healthy' | 'session-expired';
msg?: string
}
export interface ClientState {
2021-02-01 22:15:32 -08:00
instance: Client;
2021-02-04 23:05:46 -08:00
status: ClientStatus;
2020-12-25 21:39:54 -08:00
}
2021-02-04 23:05:46 -08:00
const initialState: ClientState = {
instance: new RutimeConfig().load().buildClient(),
status: { state: 'healthy' }
2020-12-25 21:39:54 -08:00
};
2021-02-04 23:05:46 -08:00
export const clientSlice = createSlice({
name: "client",
2020-12-25 21:39:54 -08:00
initialState: initialState,
reducers: {
2021-02-04 23:05:46 -08:00
sessionExpired(state, action: PayloadAction<void>) {
state.status = { state: 'session-expired', msg: 'Sessions has expired. You need to login again.' }
2020-12-25 21:39:54 -08:00
}
},
});
2021-02-01 22:15:32 -08:00
export const activeInstance = (state: any): Client => {
2021-02-04 23:05:46 -08:00
return state.client.instance;
}
export const activeInstanceStatus = (state: any): ClientStatus => {
return state.client.status;
2020-12-25 21:39:54 -08:00
}
2021-02-03 14:27:32 -08:00
2021-02-04 23:05:46 -08:00
export const { sessionExpired } = clientSlice.actions;
export default clientSlice.reducer;
2020-12-25 21:39:54 -08:00