Skip to content

Commit

Permalink
Fetch webinars from admin panel (#74)
Browse files Browse the repository at this point in the history
* prepare basic functions to fetch webinars

* types from EscolaLms for webinars

* fix type for cart item

Co-authored-by: Mateusz Motyka <mati@mateuszs-mini.home>
  • Loading branch information
mtmotyka and Mateusz Motyka authored Mar 18, 2022
1 parent d040790 commit 92aeaf7
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 5 deletions.
7 changes: 4 additions & 3 deletions src/react/context/defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -173,14 +173,13 @@ export const defaultReadConfig: EscolaLMSContextConfig = {
loading: false,
list: [],
},

fetchFields: (filter: API.FieldsParams) => Promise.reject(),

stationaryEvents: {
loading: false,
},

fetchStationaryEvents: (filter: API.StationaryEventsParams) => Promise.reject(),
fetchWebinars: (filter: API.WebinarParams) => Promise.reject(),
webinars: { loading: false },
};

export const defaultApiConfig: EscolaLMSContextConfig = {
Expand Down Expand Up @@ -327,6 +326,8 @@ export const defaultApiConfig: EscolaLMSContextConfig = {
loading: false,
},
fetchStationaryEvents: (filter: API.StationaryEventsParams) => Promise.reject(),
fetchWebinars: (filter: API.WebinarParams) => Promise.reject(),
webinars: { loading: false },
};

export const defaultConfig = Object.assign({}, defaultReadConfig, defaultApiConfig);
38 changes: 38 additions & 0 deletions src/react/context/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
h5pProgress as postSendh5pProgress,
} from './../../services/courses';
import { consultations as getConsultations, getConsultation } from './../../services/consultations';
import { webinars as getWebinars } from '../../services/webinars';
import { settings as getSettings, config as getConfig } from './../../services/settings';
import { uniqueTags as getUniqueTags } from './../../services/tags';
import { categoryTree as getCategoryTree } from './../../services/categories';
Expand Down Expand Up @@ -145,6 +146,10 @@ export const EscolaLMSContextProvider: FunctionComponent<EscolaLMSContextProvide
getDefaultData('consultation'),
);

const [webinars, setWebinars] = useLocalStorage<
ContextListState<EscolaLms.Webinar.Models.Webinar>
>('lms', 'webinars', getDefaultData('webinars'));

const [userGroup, setUserGroup] = useLocalStorage<ContextStateValue<API.UserGroupRow>>(
'lms',
'userGroup',
Expand Down Expand Up @@ -543,6 +548,37 @@ export const EscolaLMSContextProvider: FunctionComponent<EscolaLMSContextProvide
});
}, []);

const fetchWebinars = useCallback(
(filter: API.WebinarParams) => {
setWebinars((prevState) => ({ ...prevState, loading: true }));
return getWebinars(filter)
.then((response) => {
if (response.success) {
setWebinars({
loading: false,
list: response.data,
error: undefined,
});
}
if (response.success === false) {
setWebinars((prevState) => ({
...prevState,
loading: false,
error: response,
}));
}
})
.catch((error) => {
setWebinars((prevState) => ({
...prevState,
loading: false,
error: error,
}));
});
},
[setWebinars],
);

const fetchUserGroup = useCallback(
(id) => {
setUserGroup((prevState) => ({ ...prevState, loading: true }));
Expand Down Expand Up @@ -1402,6 +1438,8 @@ export const EscolaLMSContextProvider: FunctionComponent<EscolaLMSContextProvide
fetchFields,
stationaryEvents,
fetchStationaryEvents,
fetchWebinars,
webinars,
}}
>
<EditorContextProvider url={`${apiUrl}/api/hh5p`}>{children}</EditorContextProvider>
Expand Down
2 changes: 2 additions & 0 deletions src/react/context/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ export interface EscolaLMSContextReadConfig {
consultation: ContextStateValue<API.Consultation>;
fields: ContextListState<EscolaLms.ModelFields.Models.Metadata>;
stationaryEvents: ContextListState<EscolaLms.StationaryEvents.Models.StationaryEvent>;
webinars: ContextListState<API.Webinar>;
}

export interface EscolaLMSContextAPIConfig {
Expand Down Expand Up @@ -120,6 +121,7 @@ export interface EscolaLMSContextAPIConfig {
fetchConsultation: (id: number) => Promise<void>;
fetchFields: (filter: API.FieldsParams) => Promise<void>;
fetchStationaryEvents: (filter: API.StationaryEventsParams) => Promise<void>;
fetchWebinars: (filter: API.WebinarParams) => Promise<void>;
}

export type EscolaLMSContextConfig = EscolaLMSContextReadConfig & EscolaLMSContextAPIConfig;
Expand Down
19 changes: 19 additions & 0 deletions src/services/webinars.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import request from 'umi-request';
import * as API from '../types/api';

/** GET /api/webinars */
export async function webinars(params: API.WebinarParams, options?: { [key: string]: any }) {
return request<API.WebinarsList>(`/api/webinars`, {
method: 'GET',
params,
...(options || {}),
});
}

/** GET /api/webinars/:id */
export async function getWebinar(id: number, options?: { [key: string]: any }) {
return request<API.DefaultResponse<API.Webinar>>(`/api/webinars/${id}`, {
method: 'GET',
...(options || {}),
});
}
10 changes: 8 additions & 2 deletions src/types/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ export type Course = {
active_to?: string;
active_from?: string;
hours_to_complete?: number;
product: EscolaLms.Cart.Models.Product;
product?: Product;
};

export type PaginatedList<Model> = {
Expand Down Expand Up @@ -235,11 +235,13 @@ export type PageList = DefaultMetaResponse<Page>;
export type PageListItem = Page;

export type Consultation = EscolaLms.Consultations.Models.Consultation & {
product?: EscolaLms.Cart.Models.Product;
product?: Product;
};

export type Product = EscolaLms.Cart.Models.Product;

export type Webinar = EscolaLms.Webinar.Models.Webinar & { product?: Product };

export type CartProductParameters = {
description: string;
id: number;
Expand All @@ -258,6 +260,8 @@ export type CartItem = EscolaLms.Cart.Models.CartItem & {

export type ConsultationsList = DefaultMetaResponse<Consultation>;

export type WebinarsList = DefaultMetaResponse<Webinar>;

export type StationaryEventsList = DefaultMetaResponse<StationaryEvent>;

export type PaginationParams = {
Expand Down Expand Up @@ -288,6 +292,8 @@ export type ConsultationParams = PageParams &
base_price?: number;
};

export type WebinarParams = PageParams & PaginationParams & { name?: string; product?: Product };

export type StationaryEventsParams = PageParams &
PaginationParams & {
name?: string;
Expand Down

0 comments on commit 92aeaf7

Please sign in to comment.