Skip to content

Commit

Permalink
types for webinars (#92)
Browse files Browse the repository at this point in the history
* types for webinars

* categories type check

* working on webinars

* webinars

* webinars

Co-authored-by: Przemek <przemek.wiktorski@escola.pl>
  • Loading branch information
victazzz and Przemek authored Apr 7, 2022
1 parent 848abb7 commit 1008da3
Show file tree
Hide file tree
Showing 6 changed files with 200 additions and 85 deletions.
22 changes: 20 additions & 2 deletions src/react/context/defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@ export const defaultReadConfig: EscolaLMSContextConfig = {
userConsultations: {
loading: false,
},
userWebinars: { loading: false },
fetchUserWebinars: () => Promise.reject(),
fields: {
loading: false,
list: [],
Expand All @@ -183,6 +185,9 @@ export const defaultReadConfig: EscolaLMSContextConfig = {
stationaryEvents: {
loading: false,
},
stationaryEvent: {
loading: false,
},
tutorConsultations: {
loading: false,
},
Expand All @@ -192,8 +197,12 @@ export const defaultReadConfig: EscolaLMSContextConfig = {
fetchTutorConsultations: () => Promise.reject(),
approveConsultationTerm: (consultationTermId: number) => Promise.reject(),
rejectConsultationTerm: (consultationTermId: number) => Promise.reject(),
generateJitsyMeeting: (consultationTermId: number) => Promise.reject(consultationTermId),
generateConsultationJitsy: (consultationTermId: number) => Promise.reject(consultationTermId),
generateWebinarJitsy: (webinarId: number) => Promise.reject(webinarId),
webinars: { loading: false },
webinar: {
loading: false,
},
events: { loading: false },
fetchEvents: (filter: API.EventsParams) => Promise.reject(),
};
Expand Down Expand Up @@ -347,18 +356,27 @@ export const defaultApiConfig: EscolaLMSContextConfig = {
tutorConsultations: {
loading: false,
},
userWebinars: { loading: false },
fetchUserWebinars: () => Promise.reject(),
fetchFields: (filter: API.FieldsParams) => Promise.reject(),
stationaryEvents: {
loading: false,
},
stationaryEvent: {
loading: false,
},
fetchStationaryEvents: (filter: API.StationaryEventsParams) => Promise.reject(),
bookConsultationTerm: (id: number, term: string) => Promise.reject(),
fetchWebinars: (filter: API.WebinarParams) => Promise.reject(),
webinars: { loading: false },
webinar: {
loading: false,
},
fetchTutorConsultations: () => Promise.reject(),
approveConsultationTerm: (consultationTermId: number) => Promise.reject(),
rejectConsultationTerm: (consultationTermId: number) => Promise.reject(),
generateJitsyMeeting: (consultationTermId: number) => Promise.reject(consultationTermId),
generateConsultationJitsy: (consultationTermId: number) => Promise.reject(consultationTermId),
generateWebinarJitsy: (webinarId: number) => Promise.reject(webinarId),
events: { loading: false },
fetchEvents: (filter: API.EventsParams) => Promise.reject(),
};
Expand Down
166 changes: 110 additions & 56 deletions src/react/context/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,12 @@ import {
rejectConsultation,
} from "./../../services/consultations";
import { getSingleProduct } from "../../services/products";
import { webinars as getWebinars } from "../../services/webinars";
import {
getMyWebinars,
getWebinar,
webinars as getWebinars,
genereteJitsyWebinar,
} from "../../services/webinars";
import { events as getEvents } from "../../services/events";
import { settings as getSettings, config as getConfig } from "./../../services/settings";
import { uniqueTags as getUniqueTags } from "./../../services/tags";
Expand Down Expand Up @@ -318,6 +323,18 @@ export const EscolaLMSContextProvider: FunctionComponent<EscolaLMSContextProvide
ContextListState<EscolaLms.StationaryEvents.Models.StationaryEvent>
>("lms", "stationaryEvents", getDefaultData("stationaryEvents"));

const [stationaryEvent, setStationaryEvent] = useLocalStorage<
ContextStateValue<EscolaLms.StationaryEvents.Models.StationaryEvent>
>("lms", "stationaryEvent", getDefaultData("stationaryEvent"));

const [webinar, setWebinar] = useLocalStorage<
ContextStateValue<EscolaLms.Webinar.Models.Webinar>
>("lms", "webinar", getDefaultData("webinar"));

const [userWebinars, setUserWebinars] = useLocalStorage<
ContextListState<EscolaLms.Webinar.Models.Webinar>
>("lms", "userWebinars", getDefaultData("userWebinars"));

const abortControllers = useRef<{
cart: AbortController | null;
}>({
Expand Down Expand Up @@ -389,6 +406,37 @@ export const EscolaLMSContextProvider: FunctionComponent<EscolaLMSContextProvide
});
}, []);

const fetchUserWebinars = useCallback(() => {
setUserWebinars((prevState) => ({ ...prevState, loading: true }));

return token
? getMyWebinars(token)
.then((response) => {
if (response.success) {
setUserWebinars({
loading: false,
list: response.data,
error: undefined,
});
}
if (response.success === false) {
setUserWebinars((prevState) => ({
...prevState,
loading: false,
error: response,
}));
}
})
.catch((error) => {
setUserWebinars((prevState) => ({
...prevState,
loading: false,
error: error,
}));
})
: Promise.reject();
}, [token]);

const fetchTutorConsultations = useCallback(() => {
setTutorConsultations((prevState) => ({ ...prevState, loading: true }));
return token
Expand Down Expand Up @@ -471,13 +519,20 @@ export const EscolaLMSContextProvider: FunctionComponent<EscolaLMSContextProvide
[token],
);

const generateJitsyMeeting = useCallback(
const generateConsultationJitsy = useCallback(
(id: number) => {
return token ? genereteJitsy(token, id) : Promise.reject();
},
[token],
);

const generateWebinarJitsy = useCallback(
(id: number) => {
return token ? genereteJitsyWebinar(token, id) : Promise.reject();
},
[token],
);

const fetchCertificates = useCallback(() => {
setCertificates((prevState) => ({ ...prevState, loading: true }));

Expand Down Expand Up @@ -709,67 +764,61 @@ export const EscolaLMSContextProvider: FunctionComponent<EscolaLMSContextProvide
return token ? getSingleProduct(token, id) : Promise.reject();
}, []);

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) => {
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: error,
error: response,
}));
});
},
[setWebinars],
);
}
})
.catch((error) => {
setWebinars((prevState) => ({
...prevState,
loading: false,
error: error,
}));
});
}, []);

const fetchEvents = useCallback(
(filter: API.EventsParams) => {
setEvents((prevState) => ({ ...prevState, loading: true }));
return getEvents(filter)
.then((response) => {
if (response.success) {
setEvents({
loading: false,
list: response,
error: undefined,
});
}
if (response.success === false) {
setEvents((prevState) => ({
...prevState,
loading: false,
error: response,
}));
}
})
.catch((error) => {
const fetchEvents = useCallback((filter: API.EventsParams) => {
setEvents((prevState) => ({ ...prevState, loading: true }));
return getEvents(filter)
.then((response) => {
if (response.success) {
setEvents({
loading: false,
list: response,
error: undefined,
});
}
if (response.success === false) {
setEvents((prevState) => ({
...prevState,
loading: false,
error: error,
error: response,
}));
});
},
[setEvents],
);
}
})
.catch((error) => {
setEvents((prevState) => ({
...prevState,
loading: false,
error: error,
}));
});
}, []);

const fetchUserGroup = useCallback(
(id) => {
Expand Down Expand Up @@ -1112,7 +1161,7 @@ export const EscolaLMSContextProvider: FunctionComponent<EscolaLMSContextProvide
const fetchProgram = useCallback(
(id) => {
setProgram((prevState) => ({ ...prevState, loading: true }));
return id
return id && token
? getCourseProgram(id, token)
.then((response) => {
if (response.success) {
Expand Down Expand Up @@ -1655,11 +1704,16 @@ export const EscolaLMSContextProvider: FunctionComponent<EscolaLMSContextProvide
getProductInfo,
fetchTutorConsultations,
approveConsultationTerm,
generateJitsyMeeting,
generateConsultationJitsy,
rejectConsultationTerm,
tutorConsultations,
fetchEvents,
events,
stationaryEvent,
webinar,
userWebinars,
fetchUserWebinars,
generateWebinarJitsy,
}}
>
<EditorContextProvider url={`${apiUrl}/api/hh5p`}>{children}</EditorContextProvider>
Expand Down
8 changes: 6 additions & 2 deletions src/react/context/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ export interface EscolaLMSContextReadConfig {
webinars: ContextListState<API.Webinar>;
tutorConsultations: ContextPaginatedMetaState<API.AppointmentTerm>;
events: ContextPaginatedMetaState<API.Event>;
webinar: ContextStateValue<API.Webinar>;
stationaryEvent: ContextStateValue<API.StationaryEvent>;
userWebinars: ContextListState<API.Webinar>;
}

export interface EscolaLMSContextAPIConfig {
Expand Down Expand Up @@ -133,9 +136,10 @@ export interface EscolaLMSContextAPIConfig {
fetchTutorConsultations: () => Promise<void>;
approveConsultationTerm: (consultation: number) => Promise<void>;
rejectConsultationTerm: (consultation: number) => Promise<void>;
generateJitsyMeeting: (consultation: number) => Promise<API.DefaultResponse<API.JitsyData>>;
generateConsultationJitsy: (consultation: number) => Promise<API.DefaultResponse<API.JitsyData>>;
generateWebinarJitsy: (webinarId: number) => Promise<API.DefaultResponse<API.JitsyData>>;
fetchUserWebinars: () => Promise<void>;
}

export type EscolaLMSContextConfig = EscolaLMSContextReadConfig & EscolaLMSContextAPIConfig;

export type SortProgram = (lessons: API.Lesson[]) => API.Lesson[];
16 changes: 12 additions & 4 deletions src/services/stationary_events.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,23 @@
import request from 'umi-request';
import type { RequestOptionsInit } from 'umi-request';
import * as API from '../types/api';
import request from "umi-request";
import type { RequestOptionsInit } from "umi-request";
import * as API from "../types/api";

/** GET /api/stationary-events */
export async function stationaryEvents(
params: API.StationaryEventsParams,
options?: RequestOptionsInit,
) {
return request<API.StationaryEventsList>(`/api/stationary-events`, {
method: 'GET',
method: "GET",
params,
...(options || {}),
});
}

/** GET /api/stationary-events/:id */
export async function getStationaryEvent(id: number, options?: { [key: string]: any }) {
return request<API.DefaultResponse<API.StationaryEvent>>(`/api/stationary-events/${id}`, {
method: "GET",
...(options || {}),
});
}
32 changes: 28 additions & 4 deletions src/services/webinars.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import request from 'umi-request';
import * as API from '../types/api';
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',
method: "GET",
params,
...(options || {}),
});
Expand All @@ -13,7 +13,31 @@ export async function webinars(params: API.WebinarParams, options?: { [key: stri
/** 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',
method: "GET",
...(options || {}),
});
}

/** GET /api/webinars/me */
export async function getMyWebinars(token: string) {
return request<API.WebinarsList>(`/api/webinars/me`, {
method: "GET",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
});
}

/** GET /api/webinars/generate-jitsi*/
export async function genereteJitsyWebinar(token: string, id: number) {
return request<API.DefaultResponse<API.JitsyData>>(`/api/webinars/generate-jitsi/${id}`, {
method: "GET",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
Authorization: `Bearer ${token}`,
},
});
}
Loading

0 comments on commit 1008da3

Please sign in to comment.