diff --git a/libs/api-skolplattformen/.eslintrc b/libs/api-skolplattformen/.eslintrc index 3e2e57ef..9bf24eaf 100644 --- a/libs/api-skolplattformen/.eslintrc +++ b/libs/api-skolplattformen/.eslintrc @@ -1,5 +1,5 @@ { - "extends": ["plugin:@nrwl/nx/react", "../../.eslintrc.json"], + "extends": ["@react-native-community","plugin:@nrwl/nx/react", "../../.eslintrc.json"], "ignorePatterns": ["!**/*", "public", ".cache", "node_modules"], "overrides": [ { diff --git a/libs/api-skolplattformen/lib/__tests__/queueFetcher.test.ts b/libs/api-skolplattformen/lib/__tests__/queueFetcher.test.ts index ac66f342..b5e6e4f4 100644 --- a/libs/api-skolplattformen/lib/__tests__/queueFetcher.test.ts +++ b/libs/api-skolplattformen/lib/__tests__/queueFetcher.test.ts @@ -1,6 +1,6 @@ import QueueFetcher from '../queue/queueFetcher' -let sut : QueueFetcher +let sut: QueueFetcher beforeEach(() => { jest.useFakeTimers('legacy') sut = new QueueFetcher(async () => '') diff --git a/libs/api-skolplattformen/lib/api.test.ts b/libs/api-skolplattformen/lib/api.test.ts index 17cb1b75..ab3dd58f 100644 --- a/libs/api-skolplattformen/lib/api.test.ts +++ b/libs/api-skolplattformen/lib/api.test.ts @@ -112,7 +112,7 @@ describe('api', () => { const personalNumber = 'my personal number' try { await api.login(personalNumber) - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error: any) { expect(error.message).toEqual(expect.stringContaining('Server Error')) } diff --git a/libs/api-skolplattformen/lib/api.ts b/libs/api-skolplattformen/lib/api.ts index 5edb0e76..81aad47c 100644 --- a/libs/api-skolplattformen/lib/api.ts +++ b/libs/api-skolplattformen/lib/api.ts @@ -99,16 +99,17 @@ export class ApiSkolplattformen extends EventEmitter implements Api { } } - public async getSessionHeaders(url: string): Promise<{ [index: string]: string }> { + public async getSessionHeaders( + url: string + ): Promise<{ [index: string]: string }> { const init = this.getRequestInit() const cookie = await this.cookieManager.getCookieString(url) return { - ...init.headers, - cookie, + ...init.headers, + cookie, } } - public async getSession( url: string, options?: RequestInit @@ -157,7 +158,10 @@ export class ApiSkolplattformen extends EventEmitter implements Api { status.on('OK', async () => { await this.retrieveSessionCookie() - const [user, ] = await Promise.all([this.getUser(), this.retrieveXsrfToken()]) + const [user] = await Promise.all([ + this.getUser(), + this.retrieveXsrfToken(), + ]) this.personalNumber = user.personalNumber this.isLoggedIn = true @@ -171,14 +175,11 @@ export class ApiSkolplattformen extends EventEmitter implements Api { } public async loginFreja(): Promise { - await this.clearSession() const loginUrl = routes.frejaLogin const loginResponse = await this.fetch('auth-ticket', loginUrl) - - // if (!ticketResponse.ok) { // throw new Error( // `Server Error [${ticketResponse.status}] [${ticketResponse.statusText}] [${ticketUrl}]` @@ -190,15 +191,21 @@ export class ApiSkolplattformen extends EventEmitter implements Api { console.log('getting freja login url: ' + cleanAppSwitchUrl) - const checkStatusSession = await this.getSession(loginUrl, { + const checkStatusSession = await this.getSession(loginUrl, { redirect: 'manual', }) - - const status = checkFrejaStatus(this.fetch, cleanAppSwitchUrl, checkStatusSession) + const status = checkFrejaStatus( + this.fetch, + cleanAppSwitchUrl, + checkStatusSession + ) status.on('APPROVED', async () => { await this.retrieveFrejaSessionCookie() - const [user, ] = await Promise.all([this.getUser(), this.retrieveXsrfToken()]) + const [user] = await Promise.all([ + this.getUser(), + this.retrieveXsrfToken(), + ]) this.personalNumber = user.personalNumber this.isLoggedIn = true @@ -213,7 +220,6 @@ export class ApiSkolplattformen extends EventEmitter implements Api { return parts[0] } - public async setSessionCookie(sessionCookie: string): Promise { // Manually set cookie in this call and let the cookieManager // handle it from here @@ -238,27 +244,22 @@ export class ApiSkolplattformen extends EventEmitter implements Api { } private async retrieveSessionCookie(): Promise { - const url = routes.loginCookie await this.fetch('login-cookie', url) } private async retrieveFrejaSessionCookie(): Promise { - - try{ + try { const url = routes.frejaReturnUrl await this.fetch('freja-login-return-url', url) - } catch(error){ + } catch (error) { console.log(JSON.stringify(error)) } - try{ + try { const url2 = routes.frejaLoginCookie - const session = await this.getSession(url2, { - redirect: 'manual', - }) - await this.fetch('freja-login-cookie', url2) - } catch(error2){ + await this.fetch('freja-login-cookie', url2) + } catch (error2) { console.log(JSON.stringify(error2)) } } @@ -322,10 +323,14 @@ export class ApiSkolplattformen extends EventEmitter implements Api { const data = await response.json() const parsed = parse.children(data) - const useSpecialQueueModeForFSChildren = parsed.some((c) => (c.status || '').includes('FS')) + const useSpecialQueueModeForFSChildren = parsed.some((c) => + (c.status || '').includes('FS') + ) - if(useSpecialQueueModeForFSChildren) { - this.fetch = queueFetcherWrapper(this.fetch, (childId) => this.selectChildById(childId)) + if (useSpecialQueueModeForFSChildren) { + this.fetch = queueFetcherWrapper(this.fetch, (childId) => + this.selectChildById(childId) + ) } return parsed @@ -359,23 +364,26 @@ export class ApiSkolplattformen extends EventEmitter implements Api { const schoolForms = (child.status || '').split(';') let teachers: Teacher[] = [] - for(let i = 0; i< schoolForms.length; i+=1){ + for (let i = 0; i < schoolForms.length; i += 1) { const url = routes.teachers(child.sdsId, schoolForms[i]) - // eslint-disable-next-line no-await-in-loop - const response = await this.fetch(`teachers_${schoolForms[i]}`, url, session) - // eslint-disable-next-line no-await-in-loop + + const response = await this.fetch( + `teachers_${schoolForms[i]}`, + url, + session + ) + const data = await response.json() - teachers = [ - ...teachers, - ...parse.teachers(data) - ] + teachers = [...teachers, ...parse.teachers(data)] } return teachers } - public async getSchoolContacts(child: EtjanstChild): Promise { - if(this.isFake) return fakeResponse(fake.schoolContacts(child)) + public async getSchoolContacts( + child: EtjanstChild + ): Promise { + if (this.isFake) return fakeResponse(fake.schoolContacts(child)) const url = routes.schoolContacts(child.sdsId, child.schoolId || '') const session = this.getRequestInit() @@ -411,7 +419,6 @@ export class ApiSkolplattformen extends EventEmitter implements Api { return parse.news(data) } - // eslint-disable-next-line class-methods-use-this private CheckResponseForCorrectChildStatus( response: Response, child: EtjanstChild @@ -432,7 +439,12 @@ export class ApiSkolplattformen extends EventEmitter implements Api { item: NewsItem ): Promise { if (this.isFake) { - return fakeResponse(fake.news(child).find((ni) => ni.id === item.id) || {id: "", published: ""}) + return fakeResponse( + fake.news(child).find((ni) => ni.id === item.id) || { + id: '', + published: '', + } + ) } const url = routes.newsDetails(child.id, item.id) const session = this.getRequestInit() @@ -637,7 +649,7 @@ export class ApiSkolplattformen extends EventEmitter implements Api { return parse.timetable(json, year, week, lang) } - public async selectChild(child : EtjanstChild): Promise { + public async selectChild(child: EtjanstChild): Promise { const response = await this.selectChildById(child.id) const data = await response.json() @@ -660,7 +672,11 @@ export class ApiSkolplattformen extends EventEmitter implements Api { }), }) - const response = await this.fetch('selectChild', routes.selectChild, requestInit) + const response = await this.fetch( + 'selectChild', + routes.selectChild, + requestInit + ) return response } diff --git a/libs/api-skolplattformen/lib/fakeData/children.ts b/libs/api-skolplattformen/lib/fakeData/children.ts index b37bc8e2..550bb294 100644 --- a/libs/api-skolplattformen/lib/fakeData/children.ts +++ b/libs/api-skolplattformen/lib/fakeData/children.ts @@ -1,4 +1,4 @@ -import { EtjanstChild, Skola24Child } from "@skolplattformen/api" +import { EtjanstChild, Skola24Child } from '@skolplattformen/api' export const children = (): EtjanstChild[] => [ { @@ -24,6 +24,6 @@ export const skola24Children = (): Skola24Child[] => [ schoolGuid: 'def456', schoolID: 'Superskolan', timetableID: 'jkl012', - unitGuid: 'mno345' + unitGuid: 'mno345', }, ] diff --git a/libs/api-skolplattformen/lib/fakeData/classmates.ts b/libs/api-skolplattformen/lib/fakeData/classmates.ts index 688a12fe..a1fedba3 100644 --- a/libs/api-skolplattformen/lib/fakeData/classmates.ts +++ b/libs/api-skolplattformen/lib/fakeData/classmates.ts @@ -1,448 +1,452 @@ -import { Child, Classmate } from '@skolplattformen/api'; +import { Child, Classmate } from '@skolplattformen/api' import { children } from './children' -export const classmates = (child: Child): Classmate[] => classmatesData.get(child.id) ?? [] +export const classmates = (child: Child): Classmate[] => + classmatesData.get(child.id) ?? [] const [child1, child2] = children() const classmatesData = new Map([ [ - child1.id, [ - { - sisId: 'd004a-98d965a-45174-d2894ca2-f74ebcb', - firstname: 'Darion', - lastname: 'Gustafsson', - guardians: [ - { - email: 'Mike_Svensson@example.net', - firstname: 'Tad', - lastname: 'Eriksson', - mobile: '07074791613', - address: 'Martinvägen 50', - }, - ], - className: '2B', - }, - { - sisId: '54075-284de06-5664c-750b7b13-520fb61', - firstname: 'Brock', - lastname: 'Andersson', - guardians: [ - { - email: 'Brad56@example.org', - firstname: 'Camren', - lastname: 'Eriksson', - mobile: '07075129297', - address: undefined, - }, - ], - className: '2B', - }, - { - sisId: 'c1fc7-285f95d-c0f37-ea48a297-281e985', - firstname: 'Eloy', - lastname: 'Karlsson', - guardians: [ - { - email: 'Samara.Larsson@example.net', - firstname: 'Ike', - lastname: 'Gustafsson', - mobile: '07077667407', - address: undefined, - }, - ], - className: '2B', - }, - { - sisId: '212e9-8a2609c-b29c1-97a32bd8-5f84645', - firstname: 'Kristina', - lastname: 'Eriksson', - guardians: [ - { - email: 'Doug57@example.com', - firstname: 'Rollin', - lastname: 'Olsson', - mobile: '07071720107', - address: 'Höckertsvägen 2', - }, - ], - className: '2B', - }, - { - sisId: '01d21-ebc6f8b-526f8-7cfba0ab-26b9956', - firstname: 'Cydney', - lastname: 'Larsson', - guardians: [ - { - email: 'Davon6@example.org', - firstname: 'Oleta', - lastname: 'Svensson', - mobile: '07079762186', - address: undefined, - }, - ], - className: '2B', - }, - { - sisId: 'a45bb-8a481af-0ad12-7bd1fa4c-1eed4b1', - firstname: 'Berneice', - lastname: 'Persson', - guardians: [ - { - email: 'Milford_Johansson72@example.com', - firstname: 'Arely', - lastname: 'Johansson', - mobile: '07071926019', - address: 'Roslinvägen 36', - }, - ], - className: '2B', - }, - { - sisId: '32f31-039fbed-9060b-2d857c46-e47177d', - firstname: 'Emory', - lastname: 'Svensson', - guardians: [ - { - email: 'Alfredo_Nilsson96@example.org', - firstname: 'Dolores', - lastname: 'Andersson', - mobile: '070752561937', - address: 'Börjesonsvägen 6', - }, - ], - className: '2B', - }, - { - sisId: 'c9d0a-28c371d-e7be2-9781386b-6841eb0', - firstname: 'Maryjane', - lastname: 'Eriksson', - guardians: [ - { - email: 'Eula_Olsson@example.net', - firstname: 'Wendy', - lastname: 'Andersson', - mobile: '07078513037', - address: undefined, - }, - { - email: 'Lesley_Persson45@example.org', - firstname: 'Erich', - lastname: 'Persson', - mobile: '070788191316', - address: undefined, - }, - ], - className: '2B', - }, - { - sisId: 'e0f51-3fbd0be-5a8c3-ded7bbed-1d655d5', - firstname: 'Rosendo', - lastname: 'Eriksson', - guardians: [ - { - email: 'Mitchell.Gustafsson84@example.org', - firstname: 'Mariam', - lastname: 'Johansson', - mobile: '07074537423', - address: 'Molinvägen 29', - }, - { - email: 'Rachelle_Olsson@example.net', - firstname: 'Shaniya', - lastname: 'Persson', - mobile: '070765878480', - address: 'Molinvägen 29', - }, - ], - className: '2B', - }, - { - sisId: '298c2-46a24d4-548b9-3d1f90ee-4fae0ab', - firstname: 'Sammy', - lastname: 'Persson', - guardians: [ - { - email: 'Gloria_Svensson@example.com', - firstname: 'Simeon', - lastname: 'Olsson', - mobile: '070753525610', - address: 'Börjesonsvägen 43', - }, - ], - className: '2B', - }, - { - sisId: 'e7628-09352ea-b5d19-1af845b7-63b3e08', - firstname: 'Abraham', - lastname: 'Svensson', - guardians: [ - { - email: 'Erica_Johansson40@example.net', - firstname: 'Carlotta', - lastname: 'Nilsson', - mobile: '070737951712', - address: 'Aroseniusvägen 27', - }, - { - email: 'Malcolm_Gustafsson55@example.org', - firstname: 'Ramon', - lastname: 'Persson', - mobile: '07070395626', - address: 'Aroseniusvägen 27', - }, - ], - className: '2B', - }, - { - sisId: 'ae315-4696438-b3db6-8f0a5b39-74e34bd', - firstname: 'Devante', - lastname: 'Olsson', - guardians: [ - { - email: 'Alf.Johansson39@example.com', - firstname: 'Schuyler', - lastname: 'Gustafsson', - mobile: '07070724289', - address: undefined, - }, - ], - className: '2B', - }, - { - sisId: '0d812-350f1d5-323aa-d5d93cdd-406e337', - firstname: 'Tyrell', - lastname: 'Eriksson', - guardians: [ - { - email: 'Brennon.Svensson@example.com', - firstname: 'Belle', - lastname: 'Nilsson', - mobile: '07070137347', - address: undefined, - }, - ], - className: '2B', - }, - ]], - [ - child2.id, [ - { - sisId: '9ee9e-312233c-0df98-05fa5a65-a3787ec', - firstname: 'Raphael', - lastname: 'Olsson', - guardians: [ - { - email: 'Johan99@example.com', - firstname: 'Alessandra', - lastname: 'Svensson', - mobile: '070767120463', - address: 'Franklandsvägen 34', - }, - ], - className: '8C', - }, - { - sisId: 'd3a4b-16b53de-63c22-56d1ad24-4a64a2d', - firstname: 'Fanny', - lastname: 'Karlsson', - guardians: [ - { - email: 'Bernadette.Eriksson@example.org', - firstname: 'Bernadette', - lastname: 'Karlsson', - mobile: '070759877956', - address: undefined, - }, - { - email: 'Candice29@example.net', - firstname: 'Kelley', - lastname: 'Gustafsson', - mobile: '070748592035', - address: undefined, - }, - ], - className: '8C', - }, - { - sisId: '42bde-8fabd1c-7a00e-28aea88a-8481bac', - firstname: 'Jamie', - lastname: 'Persson', - guardians: [ - { - email: 'Louisa82@example.net', - firstname: 'Mose', - lastname: 'Larsson', - mobile: '07076548362', - address: undefined, - }, - ], - className: '8C', - }, - { - sisId: 'dad49-74308c8-83612-5eb7f3a5-e1c4047', - firstname: 'Iris', - lastname: 'Eriksson', - guardians: [ - { - email: 'Vaughn90@example.net', - firstname: 'Ezra', - lastname: 'Andersson', - mobile: '07078700165', - address: 'Björnsonsgatan 251 D Lgh 1503', - }, - { - email: 'Stephany_Svensson22@example.net', - firstname: 'Mia', - lastname: 'Larsson', - mobile: '070761752378', - address: 'Björnsonsgatan 251 D Lgh 1503', - }, - ], - className: '8C', - }, - { - sisId: 'b3425-ada6d70-d3acc-a49a12a6-8b3afdc', - firstname: 'Evans', - lastname: 'Nilsson', - guardians: [ - { - email: 'Terry_Svensson@example.com', - firstname: 'Christop', - lastname: 'Olsson', - mobile: '070767660094', - address: undefined, - }, - { - email: 'Johanna_Svensson30@example.org', - firstname: 'Madisen', - lastname: 'Johansson', - mobile: '07072269029', - address: undefined, - }, - ], - className: '8C', - }, - { - sisId: '67471-6c03979-9ef6e-bb2827c4-96d00d5', - firstname: 'Evy', - lastname: 'Larsson', - guardians: [ - { - email: 'Serenity.Gustafsson@example.net', - firstname: 'Toni', - lastname: 'Larsson', - mobile: '07075211567', - address: 'Roslinvägen 48', - }, - ], - className: '8C', - }, - { - sisId: 'f4040-516c4ed-34555-fd525183-6a2f666', - firstname: 'Maximillia', - lastname: 'Karlsson', - guardians: [ - { - email: 'Faustino.Andersson@example.com', - firstname: 'Eriberto', - lastname: 'Nilsson', - mobile: '07076024039', - address: 'Beckombergavägen 213 Lgh 1304', - }, - ], - className: '8C', - }, - { - sisId: 'a9494-75d8ca7-a5fd4-977eca3c-40edbc1', - firstname: 'Pia', - lastname: 'Karlsson', - guardians: [ - { - email: 'Arthur.Karlsson4@example.org', - firstname: 'Eldred', - lastname: 'Svensson', - mobile: '07077609534', - address: 'Börjesonsvägen 6', - }, - ], - className: '8C', - }, - { - sisId: '42a6d-3eaf407-fed01-4a9538de-b822503', - firstname: 'Logan', - lastname: 'Larsson', - guardians: [ - { - email: 'Blake4@example.org', - firstname: 'Jan', - lastname: 'Karlsson', - mobile: '070728715653', - address: 'Bällstavägen 162', - }, - ], - className: '8C', - }, - { - sisId: '9077d-c323c8d-d0d29-5690abfb-d348317', - firstname: 'Torun', - lastname: 'Eriksson', - guardians: [ - { - email: 'Blanca98@example.net', - firstname: 'Dallin', - lastname: 'Eriksson', - mobile: '070766214425', - address: 'Molinvägen 1', - }, - ], - className: '8C', - }, - { - sisId: '31c68-5b86667-0701d-6b7e2471-89e6df9', - firstname: 'Izabella', - lastname: 'Johansson', - guardians: [ - { - email: 'Elouise_Johansson25@example.org', - firstname: 'Jerrold', - lastname: 'Nilsson', - mobile: '07073789274', - address: 'Stobaeusvägen 11', - }, - ], - className: '8C', - }, - { - sisId: '1bb69-5f1c3a6-f0ea8-e1dbb608-2756a52', - firstname: 'Ella', - lastname: 'Persson', - guardians: [ - { - email: 'Shayna.Olsson54@example.net', - firstname: 'Onie', - lastname: 'Nilsson', - mobile: '07076957797', - address: undefined, - }, - ], - className: '8C', - }, - { - sisId: '348a7-2d0eccc-02981-a02ccb03-cb2a8f2', - firstname: 'Jaylen', - lastname: 'Larsson', - guardians: [ - { - email: 'Aileen_Andersson@example.net', - firstname: 'Tess', - lastname: 'Karlsson', - mobile: '070715315590', - address: 'Peringskiöldsvägen 64', - }, - ], - className: '8C', - } + child1.id, + [ + { + sisId: 'd004a-98d965a-45174-d2894ca2-f74ebcb', + firstname: 'Darion', + lastname: 'Gustafsson', + guardians: [ + { + email: 'Mike_Svensson@example.net', + firstname: 'Tad', + lastname: 'Eriksson', + mobile: '07074791613', + address: 'Martinvägen 50', + }, + ], + className: '2B', + }, + { + sisId: '54075-284de06-5664c-750b7b13-520fb61', + firstname: 'Brock', + lastname: 'Andersson', + guardians: [ + { + email: 'Brad56@example.org', + firstname: 'Camren', + lastname: 'Eriksson', + mobile: '07075129297', + address: undefined, + }, + ], + className: '2B', + }, + { + sisId: 'c1fc7-285f95d-c0f37-ea48a297-281e985', + firstname: 'Eloy', + lastname: 'Karlsson', + guardians: [ + { + email: 'Samara.Larsson@example.net', + firstname: 'Ike', + lastname: 'Gustafsson', + mobile: '07077667407', + address: undefined, + }, + ], + className: '2B', + }, + { + sisId: '212e9-8a2609c-b29c1-97a32bd8-5f84645', + firstname: 'Kristina', + lastname: 'Eriksson', + guardians: [ + { + email: 'Doug57@example.com', + firstname: 'Rollin', + lastname: 'Olsson', + mobile: '07071720107', + address: 'Höckertsvägen 2', + }, + ], + className: '2B', + }, + { + sisId: '01d21-ebc6f8b-526f8-7cfba0ab-26b9956', + firstname: 'Cydney', + lastname: 'Larsson', + guardians: [ + { + email: 'Davon6@example.org', + firstname: 'Oleta', + lastname: 'Svensson', + mobile: '07079762186', + address: undefined, + }, + ], + className: '2B', + }, + { + sisId: 'a45bb-8a481af-0ad12-7bd1fa4c-1eed4b1', + firstname: 'Berneice', + lastname: 'Persson', + guardians: [ + { + email: 'Milford_Johansson72@example.com', + firstname: 'Arely', + lastname: 'Johansson', + mobile: '07071926019', + address: 'Roslinvägen 36', + }, + ], + className: '2B', + }, + { + sisId: '32f31-039fbed-9060b-2d857c46-e47177d', + firstname: 'Emory', + lastname: 'Svensson', + guardians: [ + { + email: 'Alfredo_Nilsson96@example.org', + firstname: 'Dolores', + lastname: 'Andersson', + mobile: '070752561937', + address: 'Börjesonsvägen 6', + }, + ], + className: '2B', + }, + { + sisId: 'c9d0a-28c371d-e7be2-9781386b-6841eb0', + firstname: 'Maryjane', + lastname: 'Eriksson', + guardians: [ + { + email: 'Eula_Olsson@example.net', + firstname: 'Wendy', + lastname: 'Andersson', + mobile: '07078513037', + address: undefined, + }, + { + email: 'Lesley_Persson45@example.org', + firstname: 'Erich', + lastname: 'Persson', + mobile: '070788191316', + address: undefined, + }, + ], + className: '2B', + }, + { + sisId: 'e0f51-3fbd0be-5a8c3-ded7bbed-1d655d5', + firstname: 'Rosendo', + lastname: 'Eriksson', + guardians: [ + { + email: 'Mitchell.Gustafsson84@example.org', + firstname: 'Mariam', + lastname: 'Johansson', + mobile: '07074537423', + address: 'Molinvägen 29', + }, + { + email: 'Rachelle_Olsson@example.net', + firstname: 'Shaniya', + lastname: 'Persson', + mobile: '070765878480', + address: 'Molinvägen 29', + }, + ], + className: '2B', + }, + { + sisId: '298c2-46a24d4-548b9-3d1f90ee-4fae0ab', + firstname: 'Sammy', + lastname: 'Persson', + guardians: [ + { + email: 'Gloria_Svensson@example.com', + firstname: 'Simeon', + lastname: 'Olsson', + mobile: '070753525610', + address: 'Börjesonsvägen 43', + }, + ], + className: '2B', + }, + { + sisId: 'e7628-09352ea-b5d19-1af845b7-63b3e08', + firstname: 'Abraham', + lastname: 'Svensson', + guardians: [ + { + email: 'Erica_Johansson40@example.net', + firstname: 'Carlotta', + lastname: 'Nilsson', + mobile: '070737951712', + address: 'Aroseniusvägen 27', + }, + { + email: 'Malcolm_Gustafsson55@example.org', + firstname: 'Ramon', + lastname: 'Persson', + mobile: '07070395626', + address: 'Aroseniusvägen 27', + }, + ], + className: '2B', + }, + { + sisId: 'ae315-4696438-b3db6-8f0a5b39-74e34bd', + firstname: 'Devante', + lastname: 'Olsson', + guardians: [ + { + email: 'Alf.Johansson39@example.com', + firstname: 'Schuyler', + lastname: 'Gustafsson', + mobile: '07070724289', + address: undefined, + }, + ], + className: '2B', + }, + { + sisId: '0d812-350f1d5-323aa-d5d93cdd-406e337', + firstname: 'Tyrell', + lastname: 'Eriksson', + guardians: [ + { + email: 'Brennon.Svensson@example.com', + firstname: 'Belle', + lastname: 'Nilsson', + mobile: '07070137347', + address: undefined, + }, + ], + className: '2B', + }, + ], + ], + [ + child2.id, + [ + { + sisId: '9ee9e-312233c-0df98-05fa5a65-a3787ec', + firstname: 'Raphael', + lastname: 'Olsson', + guardians: [ + { + email: 'Johan99@example.com', + firstname: 'Alessandra', + lastname: 'Svensson', + mobile: '070767120463', + address: 'Franklandsvägen 34', + }, + ], + className: '8C', + }, + { + sisId: 'd3a4b-16b53de-63c22-56d1ad24-4a64a2d', + firstname: 'Fanny', + lastname: 'Karlsson', + guardians: [ + { + email: 'Bernadette.Eriksson@example.org', + firstname: 'Bernadette', + lastname: 'Karlsson', + mobile: '070759877956', + address: undefined, + }, + { + email: 'Candice29@example.net', + firstname: 'Kelley', + lastname: 'Gustafsson', + mobile: '070748592035', + address: undefined, + }, + ], + className: '8C', + }, + { + sisId: '42bde-8fabd1c-7a00e-28aea88a-8481bac', + firstname: 'Jamie', + lastname: 'Persson', + guardians: [ + { + email: 'Louisa82@example.net', + firstname: 'Mose', + lastname: 'Larsson', + mobile: '07076548362', + address: undefined, + }, + ], + className: '8C', + }, + { + sisId: 'dad49-74308c8-83612-5eb7f3a5-e1c4047', + firstname: 'Iris', + lastname: 'Eriksson', + guardians: [ + { + email: 'Vaughn90@example.net', + firstname: 'Ezra', + lastname: 'Andersson', + mobile: '07078700165', + address: 'Björnsonsgatan 251 D Lgh 1503', + }, + { + email: 'Stephany_Svensson22@example.net', + firstname: 'Mia', + lastname: 'Larsson', + mobile: '070761752378', + address: 'Björnsonsgatan 251 D Lgh 1503', + }, + ], + className: '8C', + }, + { + sisId: 'b3425-ada6d70-d3acc-a49a12a6-8b3afdc', + firstname: 'Evans', + lastname: 'Nilsson', + guardians: [ + { + email: 'Terry_Svensson@example.com', + firstname: 'Christop', + lastname: 'Olsson', + mobile: '070767660094', + address: undefined, + }, + { + email: 'Johanna_Svensson30@example.org', + firstname: 'Madisen', + lastname: 'Johansson', + mobile: '07072269029', + address: undefined, + }, + ], + className: '8C', + }, + { + sisId: '67471-6c03979-9ef6e-bb2827c4-96d00d5', + firstname: 'Evy', + lastname: 'Larsson', + guardians: [ + { + email: 'Serenity.Gustafsson@example.net', + firstname: 'Toni', + lastname: 'Larsson', + mobile: '07075211567', + address: 'Roslinvägen 48', + }, + ], + className: '8C', + }, + { + sisId: 'f4040-516c4ed-34555-fd525183-6a2f666', + firstname: 'Maximillia', + lastname: 'Karlsson', + guardians: [ + { + email: 'Faustino.Andersson@example.com', + firstname: 'Eriberto', + lastname: 'Nilsson', + mobile: '07076024039', + address: 'Beckombergavägen 213 Lgh 1304', + }, + ], + className: '8C', + }, + { + sisId: 'a9494-75d8ca7-a5fd4-977eca3c-40edbc1', + firstname: 'Pia', + lastname: 'Karlsson', + guardians: [ + { + email: 'Arthur.Karlsson4@example.org', + firstname: 'Eldred', + lastname: 'Svensson', + mobile: '07077609534', + address: 'Börjesonsvägen 6', + }, + ], + className: '8C', + }, + { + sisId: '42a6d-3eaf407-fed01-4a9538de-b822503', + firstname: 'Logan', + lastname: 'Larsson', + guardians: [ + { + email: 'Blake4@example.org', + firstname: 'Jan', + lastname: 'Karlsson', + mobile: '070728715653', + address: 'Bällstavägen 162', + }, + ], + className: '8C', + }, + { + sisId: '9077d-c323c8d-d0d29-5690abfb-d348317', + firstname: 'Torun', + lastname: 'Eriksson', + guardians: [ + { + email: 'Blanca98@example.net', + firstname: 'Dallin', + lastname: 'Eriksson', + mobile: '070766214425', + address: 'Molinvägen 1', + }, + ], + className: '8C', + }, + { + sisId: '31c68-5b86667-0701d-6b7e2471-89e6df9', + firstname: 'Izabella', + lastname: 'Johansson', + guardians: [ + { + email: 'Elouise_Johansson25@example.org', + firstname: 'Jerrold', + lastname: 'Nilsson', + mobile: '07073789274', + address: 'Stobaeusvägen 11', + }, + ], + className: '8C', + }, + { + sisId: '1bb69-5f1c3a6-f0ea8-e1dbb608-2756a52', + firstname: 'Ella', + lastname: 'Persson', + guardians: [ + { + email: 'Shayna.Olsson54@example.net', + firstname: 'Onie', + lastname: 'Nilsson', + mobile: '07076957797', + address: undefined, + }, + ], + className: '8C', + }, + { + sisId: '348a7-2d0eccc-02981-a02ccb03-cb2a8f2', + firstname: 'Jaylen', + lastname: 'Larsson', + guardians: [ + { + email: 'Aileen_Andersson@example.net', + firstname: 'Tess', + lastname: 'Karlsson', + mobile: '070715315590', + address: 'Peringskiöldsvägen 64', + }, + ], + className: '8C', + }, + ], ], -] ]) diff --git a/libs/api-skolplattformen/lib/fakeData/data.ts b/libs/api-skolplattformen/lib/fakeData/data.ts index 81deb8b2..622b47f4 100644 --- a/libs/api-skolplattformen/lib/fakeData/data.ts +++ b/libs/api-skolplattformen/lib/fakeData/data.ts @@ -1,13 +1,13 @@ -import { fourDaysAgo, oneDayAgo, oneWeekAgo } from './dates'; -/* eslint-disable max-len */ +import { fourDaysAgo, oneDayAgo, oneWeekAgo } from './dates' + import { CalendarItem, Child, Notification, ScheduleItem, User, -} from '@skolplattformen/api'; -import { oneDayForward, oneWeekForward, twoDaysForward } from './dates'; +} from '@skolplattformen/api' +import { oneDayForward, oneWeekForward, twoDaysForward } from './dates' const data: any = { '39b59e-bf4b9f-f68ac25321-977218-bf0': { @@ -203,18 +203,17 @@ const data: any = { allDayEvent: false, startDate: oneDayForward.startOf('day').toISO(), endDate: oneDayForward.endOf('day').toISO(), - oneDayEvent: true - } as ScheduleItem + oneDayEvent: true, + } as ScheduleItem, ], notifications: [ { id: 'bfe19b-766db3-b38d99d321-bbed3d-506', sender: 'Planering och Bedömning', - dateCreated: oneDayAgo.minus({months: 6}).toISO(), + dateCreated: oneDayAgo.minus({ months: 6 }).toISO(), dateModified: fourDaysAgo.toISO(), message: 'Ett nytt inlägg i en lärlogg har skapats.', - url: - 'https://www.breakit.se/artikel/21423/har-ar-it-bolaget-bakom-haveriet-pa-skolplattformen', + url: 'https://www.breakit.se/artikel/21423/har-ar-it-bolaget-bakom-haveriet-pa-skolplattformen', category: 'Lärlogg', type: 'avisering', }, @@ -224,8 +223,7 @@ const data: any = { dateCreated: '2020-12-10T14:31:29.966Z', message: 'Nu kan du ta del av ditt barns dokumentation av utvecklingssamtal', - url: - 'https://www.breakit.se/artikel/21404/kodaren-slog-larm-nu-akutstoppas-skolplattformen-i-stockholm', + url: 'https://www.breakit.se/artikel/21404/kodaren-slog-larm-nu-akutstoppas-skolplattformen-i-stockholm', category: null, type: 'webnotify', }, @@ -234,8 +232,7 @@ const data: any = { sender: 'Planering och Bedömning', dateCreated: '2020-06-10T12:18:00.000Z', message: 'Nu finns det en bedömning att titta på.', - url: - 'https://www.svt.se/nyheter/lokalt/stockholm/skolplattformen-i-stockholm-beratta-om-era-erfarenheter', + url: 'https://www.svt.se/nyheter/lokalt/stockholm/skolplattformen-i-stockholm-beratta-om-era-erfarenheter', category: 'Bedömning', type: 'avisering', }, @@ -244,8 +241,7 @@ const data: any = { sender: 'Planering och Bedömning', dateCreated: '2020-03-24T14:28:00.000Z', message: 'Nu finns det en bedömning att titta på.', - url: - 'https://www.breakit.se/artikel/18120/skolplattformen-kostade-700-miljoner-strid-med-entreprenor-om-varumarket', + url: 'https://www.breakit.se/artikel/18120/skolplattformen-kostade-700-miljoner-strid-med-entreprenor-om-varumarket', category: 'Bedömning', type: 'avisering', }, @@ -254,8 +250,7 @@ const data: any = { sender: 'Planering och Bedömning', dateCreated: '2020-03-24T13:48:00.000Z', message: 'Nu finns det en bedömning att titta på.', - url: - 'https://www.mitti.se/nyheter/forskolans-tur-att-fa-kritiserade-skolplattformen-app/lmsau!5338007/', + url: 'https://www.mitti.se/nyheter/forskolans-tur-att-fa-kritiserade-skolplattformen-app/lmsau!5338007/', category: 'Bedömning', type: 'avisering', }, @@ -434,8 +429,8 @@ const data: any = { allDayEvent: false, startDate: twoDaysForward.startOf('day').toISO(), endDate: twoDaysForward.endOf('day').toISO(), - oneDayEvent: false - } as ScheduleItem + oneDayEvent: false, + } as ScheduleItem, ], notifications: [ { @@ -444,8 +439,7 @@ const data: any = { dateCreated: fourDaysAgo.toISO(), dateModified: fourDaysAgo.toISO(), message: 'Ett nytt inlägg i en lärlogg har skapats.', - url: - 'https://www.mitti.se/nyheter/rekorddyr-skolplattform-kostar-258-miljoner-till/lmsao!5381301/', + url: 'https://www.mitti.se/nyheter/rekorddyr-skolplattform-kostar-258-miljoner-till/lmsao!5381301/', category: 'Lärlogg', messageType: 'avisering', }, @@ -454,8 +448,7 @@ const data: any = { sender: 'Planering och Bedömning', dateCreated: '2020-12-01T12:43:00.000Z', message: 'Ett nytt inlägg i en lärlogg har skapats.', - url: - 'https://computersweden.idg.se/2.2683/1.722561/lacka-skolplattformen-datainspektionen', + url: 'https://computersweden.idg.se/2.2683/1.722561/lacka-skolplattformen-datainspektionen', category: 'Lärlogg', messageType: 'avisering', }, @@ -473,8 +466,7 @@ const data: any = { sender: 'Planering och Bedömning', dateCreated: '2020-11-16T13:24:00.000Z', message: 'Ett nytt inlägg i en lärlogg har skapats.', - url: - 'https://www.breakit.se/artikel/27075/skolplattformen-kostade-1-miljard-att-bygga-nu-tvingas-stockholm-bota', + url: 'https://www.breakit.se/artikel/27075/skolplattformen-kostade-1-miljard-att-bygga-nu-tvingas-stockholm-bota', category: 'Lärlogg', messageType: 'avisering', }, @@ -483,8 +475,7 @@ const data: any = { sender: 'Planering och Bedömning', dateCreated: '2020-11-12T13:27:00.000Z', message: 'Ett nytt inlägg i en lärlogg har skapats.', - url: - 'https://www.nyteknik.se/sakerhet/ygeman-om-datalackan-i-skolplattformen-det-ar-upprorande-6968853', + url: 'https://www.nyteknik.se/sakerhet/ygeman-om-datalackan-i-skolplattformen-det-ar-upprorande-6968853', category: 'Lärlogg', messageType: 'avisering', }, @@ -496,7 +487,7 @@ export const user = (): User => ({ personalNumber: '195001182046', // Test personal number from Skatteverket firstName: 'Namn', lastName: 'Namnsson', - isAuthenticated: true + isAuthenticated: true, }) export const calendar = (child: Child): CalendarItem[] => diff --git a/libs/api-skolplattformen/lib/fakeData/dates.ts b/libs/api-skolplattformen/lib/fakeData/dates.ts index 9858fa50..a9c0795c 100644 --- a/libs/api-skolplattformen/lib/fakeData/dates.ts +++ b/libs/api-skolplattformen/lib/fakeData/dates.ts @@ -1,14 +1,14 @@ -import { DateTime } from "luxon" +import { DateTime } from 'luxon' export const getDate = () => DateTime.now() -export const oneDayAgo = getDate().minus({days: 1}) -export const twoDaysAgo = getDate().minus({days: 2}) -export const fourDaysAgo = getDate().minus({days: 4}) -export const oneWeekAgo = getDate().minus({weeks: 1}) +export const oneDayAgo = getDate().minus({ days: 1 }) +export const twoDaysAgo = getDate().minus({ days: 2 }) +export const fourDaysAgo = getDate().minus({ days: 4 }) +export const oneWeekAgo = getDate().minus({ weeks: 1 }) -export const oneDayForward = getDate().plus({days: 1}) -export const twoDaysForward = getDate().plus({days: 2}) -export const fourDaysForward = getDate().plus({days: 4}) -export const oneWeekForward = getDate().plus({weeks: 1}) +export const oneDayForward = getDate().plus({ days: 1 }) +export const twoDaysForward = getDate().plus({ days: 2 }) +export const fourDaysForward = getDate().plus({ days: 4 }) +export const oneWeekForward = getDate().plus({ weeks: 1 }) export const week = getDate().weekNumber.toString() diff --git a/libs/api-skolplattformen/lib/fakeData/menu.ts b/libs/api-skolplattformen/lib/fakeData/menu.ts index 128f26f9..eb5c5c29 100644 --- a/libs/api-skolplattformen/lib/fakeData/menu.ts +++ b/libs/api-skolplattformen/lib/fakeData/menu.ts @@ -10,9 +10,9 @@ const week = getDate().weekNumber.toString() const [child1, child2] = children() const menuData = new Map([ -[ - child1.id, - [ + [ + child1.id, + [ { title: 'Måndag - Vecka ' + week, description: 'Kebabgryta ris
Ratatouille med kikärter', @@ -37,28 +37,33 @@ const menuData = new Map([ }, ], ], - [child2.id, + [ + child2.id, [ { - title: "Måndag - Vecka " + week, - description: "Thailändsk kycklinggryta med kokosmjölk, rödcurry och jasminris
Thailänsk grönsaksgryta med kokosmjölk, rödcurry och jasminris" + title: 'Måndag - Vecka ' + week, + description: + 'Thailändsk kycklinggryta med kokosmjölk, rödcurry och jasminris
Thailänsk grönsaksgryta med kokosmjölk, rödcurry och jasminris', }, { - title: "Tisdag - Vecka " + week, - description: "Örtomlett med potatis , medelhavsost och olivtapenad" + title: 'Tisdag - Vecka ' + week, + description: 'Örtomlett med potatis , medelhavsost och olivtapenad', }, { - title: "Onsdag - Vecka " + week, - description: "Spagetti med rökt kalkon , grädde, dijon och persilja
Spagetti med rostade bönor , grädde , dijon och persilja" + title: 'Onsdag - Vecka ' + week, + description: + 'Spagetti med rökt kalkon , grädde, dijon och persilja
Spagetti med rostade bönor , grädde , dijon och persilja', }, { - title: "Torsdag - Vecka " + week, - description: "Panerad flundra med dansk remoulad och koktåotatis
morot och linsbiff med danska remoulad och koktpotatis" + title: 'Torsdag - Vecka ' + week, + description: + 'Panerad flundra med dansk remoulad och koktåotatis
morot och linsbiff med danska remoulad och koktpotatis', }, { - title: "Fredag - Vecka " + week, - description: "Texaschili på högrev med picklad rödlök och bulgur
Texaschili på svartabönor picklad rödlök och bulgur" - } + title: 'Fredag - Vecka ' + week, + description: + 'Texaschili på högrev med picklad rödlök och bulgur
Texaschili på svartabönor picklad rödlök och bulgur', + }, ], - ] + ], ]) diff --git a/libs/api-skolplattformen/lib/fakeData/news.ts b/libs/api-skolplattformen/lib/fakeData/news.ts index 234fcab8..b4a987a8 100644 --- a/libs/api-skolplattformen/lib/fakeData/news.ts +++ b/libs/api-skolplattformen/lib/fakeData/news.ts @@ -7,137 +7,132 @@ export const news = (child: Child): NewsItem[] => newsData.get(child.id) ?? [] const [child1, child2] = children() const newsData = new Map([ -[child1.id, [ - { - id: 'asdfasdfasdfw', - author: 'Vaktmästare Persson', - header: 'Brandsläckare!', - intro: 'Idag hade vi en incident med en brandsläckare.', - body: - '## Information om brandsläckarincidenten\n\nHej, idag vid lunchtid utlöste en elev av misstag en pulverbrandsläckare i kapprummet. En del pulver yrde runt i rummet och under saneringen fick eleverna i angränsande klassrum vara i aulan istället för klassrummet.\n\nFlera elever var på plats i hallen när detta inträffade men utrymdes kort därefter. Pulvret är INTE hälsovådligt men kan ge upphov till halsirritation vid inandning.\n\nJag har pratat med berörda elever om det inträffade och uppmanat dem att ta hem kläder och tillhörigheter som fanns i kapprummet eftersom de troligen blivit dammiga. Vi rekommenderar att ni tvättar eller vädrar dessa.', - imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', - fullImageUrl: - 'https://cdn.breakit.se/assets/article/6607f9b923edb6f85aa4417bab43c0f8.jpg?d=980x500', - imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', - published: dates.twoDaysAgo.toISO(), - modified: dates.twoDaysAgo.plus({ hours: 1 }).toISO(), - }, - { - id: 'asdfabbuasdfs', - author: 'Ada L.', - header: 'Bygg din egen app', - intro: 'Denna vecka bygger vi appar!', - body: - '## Appar med öppen data \n\nDenna vecka har vi förmånen att få besök av några föräldrar som visar hur vi enkelt kan skapa appar som visar information ifrån öppna datakällor.\n\nEn fantastisk möjlighet att lära oss hur digitalisering skapar nya möjligheter i såväl skolan som arbetslivet.', - imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', - fullImageUrl: - 'https://live.staticflickr.com/4063/4369776892_5cd42d27ba.jpg', - imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', - published: dates.oneWeekAgo.toISO(), - modified: dates.oneWeekAgo.toISO(), - }, - { - id: 'asdfasdfasdfs', - author: 'Magister Svensson', - header: 'Läxor vecka 6.', - intro: 'Alla elever måste göra sina läxor!', - body: - '## Läxor vecka 6 \n\nFöljande läxor är obligatoriska:\n\n- Antikens historia\n- Svenska stormaktstiden\n- Statistik A\n- Flerdimensionell analys, del 1', - imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', - fullImageUrl: - 'https://www.mitti.se/_internal/cimg!0/ejf8efxee735ymm8tm40q3hhkl36sdt.jpeg', - imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', - published: dates.oneWeekAgo.toISO(), - modified: dates.oneWeekAgo.minus({ hours: 3 }).toISO(), - }, - ] -], + [ + child1.id, + [ + { + id: 'asdfasdfasdfw', + author: 'Vaktmästare Persson', + header: 'Brandsläckare!', + intro: 'Idag hade vi en incident med en brandsläckare.', + body: '## Information om brandsläckarincidenten\n\nHej, idag vid lunchtid utlöste en elev av misstag en pulverbrandsläckare i kapprummet. En del pulver yrde runt i rummet och under saneringen fick eleverna i angränsande klassrum vara i aulan istället för klassrummet.\n\nFlera elever var på plats i hallen när detta inträffade men utrymdes kort därefter. Pulvret är INTE hälsovådligt men kan ge upphov till halsirritation vid inandning.\n\nJag har pratat med berörda elever om det inträffade och uppmanat dem att ta hem kläder och tillhörigheter som fanns i kapprummet eftersom de troligen blivit dammiga. Vi rekommenderar att ni tvättar eller vädrar dessa.', + imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', + fullImageUrl: + 'https://cdn.breakit.se/assets/article/6607f9b923edb6f85aa4417bab43c0f8.jpg?d=980x500', + imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', + published: dates.twoDaysAgo.toISO(), + modified: dates.twoDaysAgo.plus({ hours: 1 }).toISO(), + }, + { + id: 'asdfabbuasdfs', + author: 'Ada L.', + header: 'Bygg din egen app', + intro: 'Denna vecka bygger vi appar!', + body: '## Appar med öppen data \n\nDenna vecka har vi förmånen att få besök av några föräldrar som visar hur vi enkelt kan skapa appar som visar information ifrån öppna datakällor.\n\nEn fantastisk möjlighet att lära oss hur digitalisering skapar nya möjligheter i såväl skolan som arbetslivet.', + imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', + fullImageUrl: + 'https://live.staticflickr.com/4063/4369776892_5cd42d27ba.jpg', + imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', + published: dates.oneWeekAgo.toISO(), + modified: dates.oneWeekAgo.toISO(), + }, + { + id: 'asdfasdfasdfs', + author: 'Magister Svensson', + header: 'Läxor vecka 6.', + intro: 'Alla elever måste göra sina läxor!', + body: '## Läxor vecka 6 \n\nFöljande läxor är obligatoriska:\n\n- Antikens historia\n- Svenska stormaktstiden\n- Statistik A\n- Flerdimensionell analys, del 1', + imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', + fullImageUrl: + 'https://www.mitti.se/_internal/cimg!0/ejf8efxee735ymm8tm40q3hhkl36sdt.jpeg', + imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', + published: dates.oneWeekAgo.toISO(), + modified: dates.oneWeekAgo.minus({ hours: 3 }).toISO(), + }, + ], + ], -[child2.id, [ - { - id: 'asdfasdfasdfa', - author: 'Rektor Gustavsson', - header: 'Välkommen till skolan!', - intro: - 'Hej alla barn och föräldrar och välkomna till Storskolan! Här kommer en del information som kan vara bra att känna till inför första dagen.', - body: - '## Information till föräldrar \n\nSkolan börjar kl 08.00 och slutar 18.00. Kommer man sent eller blir sjuk så ska det anmälas via Skolplattformen. Se till så att dina barn har ätit frukost. Frukt är nyttigt! \n\n## Information till barn\n\nLek är tillåtet på rasterna men enbart på skolgården. Medtag ej egna leksaker. Tvätta händerna.', - imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', - fullImageUrl: - 'https://timbro.se/app/uploads/2020/10/broman-skolplattformen-1280x752.jpg', - imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', - published: dates.oneWeekAgo.toISO(), - modified: dates.oneWeekAgo.toISO(), - }, - { - id: 'asdfabbuasdfs', - author: 'Ada L.', - header: 'App, App, App', - intro: 'Denna vecka bygger vi appar!', - body: - '## Appar med öppen data \n\nDenna vecka har vi förmånen att få besök av några föräldrar som visar hur vi enkelt kan skapa appar som visar information ifrån öppna datakällor.\n\nEn fantastisk möjlighet att lära oss hur digitalisering skapar nya möjligheter i såväl skolan som arbetslivet.', - imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', - fullImageUrl: - 'https://live.staticflickr.com/4063/4369776892_5cd42d27ba.jpg', - imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', - published: dates.fourDaysAgo.toISO(), - modified: dates.fourDaysAgo.plus({minutes: 45}).toISO(), - }, - { - id: 'asdfasdfasdfs', - author: 'Magister Svensson', - header: 'Läxor i veckan', - intro: 'Alla elever måste göra sina läxor!', - body: - '## Läxor vecka 6 \n\nFöljande läxor är obligatoriska:\n\n- Antikens historia\n- Svenska stormaktstiden\n- Statistik A\n- Flerdimensionell analys, del 1', - imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', - fullImageUrl: - 'https://www.mitti.se/_internal/cimg!0/ejf8efxee735ymm8tm40q3hhkl36sdt.jpeg', - imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', - published: dates.oneWeekAgo.toISO(), - modified: dates.oneWeekAgo.toISO(), - }, - { - id: 'asdfasdfasdfd', - author: 'Information från Förskoleklass', - header: 'Vinteraktiviteter', - intro: - 'Vi kommer efter att förskoleklassen är slut arrangera olika vinteraktiviteter genom fridtidsverksamheten.', - body: - '## Vänligen ta med hjälm, skridskor eller stjärtlapp.\n\n ![Bild](https://images.unsplash.com/photo-1495377701095-00261b767581?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=988&q=80)\n\n Alla barn måste ha hjälm på sig samt varma kläder. Vi kommer åka i backen bakom skolbyggnaden samt använda isen som spolats vid Mullsjöskolan. Personal kommer finnas på plats samt att vi erbjuda varm dryck, frukt och lek för de barn som ej har hjälm eller lämpligt åkdon.', - imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', - fullImageUrl: 'https://unsplash.com/photos/yB_aiAWkm40', - imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', - published: dates.oneWeekAgo.minus({weeks: 2}).toISO(), - modified: dates.oneWeekAgo.minus({weeks: 1}).toISO(), - }, - { - id: 'asdfasdfasdfdsa', - author: 'Köket', - header: 'Ekologisk vecka i matsalen', - intro: 'Ekologiska veckan i matsalen vecka 11', - body: - '## Vi kommer ha tema jorden i matsalen och servera ekologisk mat från hela världen med tema jorden. Detta för att belysa att man kan använda alla delar av råvaorna. Det kommer erbjudas rätter från alla världsdelar som är producerat för jordens bästa. Smaklig spis hälsar Gunnel i köket med personal.', - imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', - fullImageUrl: 'https://unsplash.com/photos/7K17MvT8qBg', - imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', - published: dates.oneWeekAgo.minus({weeks: 3}).toISO(), - modified: dates.oneWeekAgo.minus({days: 2}).toISO(), - }, - { - id: 'asdfasdfasdfbvdsa', - author: 'Vaktmästaren', - header: 'Klotter i korridoren (igen)', - intro: - 'Ännu en gång har vi råka ut för skadegörelse i korridorerna vid åk 5', - body: - '## Tyvärr har flera elever klottat på skåp och väggar vid åk5 skåpen. Detta är helt oacceptablet beteende och kostar skolan stora belopp att åtgärda. Vi ber alla föräldrar prata med sina barn om klotter samt att det var väldigt grovt spårkbruk. Personalen på skolan kommer att hålla extra uppsikt och vi har även pratat med en del av de inblandade eleverna i denna skadegörelse.\n\nPersonalen har även börjat forska på vad vissa av de skrivna orden betyder och Eva-Britt är förfasad över språkbruket samt vad de innebär. Bernt kommer att påbörja saneringen och återställningen av skadegörelsen samt vakta korridorerna nogrannare för att säkerställa att detta ej kommer ske igen.\n\n Klotter\n\nUPPDATERING: Det som är skrivet om Sara är inte sant! ', - imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', - fullImageUrl: 'https://unsplash.com/photos/SkbEZ16VywM', - imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', - published: dates.oneWeekAgo.minus({weeks: 4}).toISO(), - modified: dates.oneWeekAgo.minus({weeks: 2}).toISO(), - }, - ] -] + [ + child2.id, + [ + { + id: 'asdfasdfasdfa', + author: 'Rektor Gustavsson', + header: 'Välkommen till skolan!', + intro: + 'Hej alla barn och föräldrar och välkomna till Storskolan! Här kommer en del information som kan vara bra att känna till inför första dagen.', + body: '## Information till föräldrar \n\nSkolan börjar kl 08.00 och slutar 18.00. Kommer man sent eller blir sjuk så ska det anmälas via Skolplattformen. Se till så att dina barn har ätit frukost. Frukt är nyttigt! \n\n## Information till barn\n\nLek är tillåtet på rasterna men enbart på skolgården. Medtag ej egna leksaker. Tvätta händerna.', + imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', + fullImageUrl: + 'https://timbro.se/app/uploads/2020/10/broman-skolplattformen-1280x752.jpg', + imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', + published: dates.oneWeekAgo.toISO(), + modified: dates.oneWeekAgo.toISO(), + }, + { + id: 'asdfabbuasdfs', + author: 'Ada L.', + header: 'App, App, App', + intro: 'Denna vecka bygger vi appar!', + body: '## Appar med öppen data \n\nDenna vecka har vi förmånen att få besök av några föräldrar som visar hur vi enkelt kan skapa appar som visar information ifrån öppna datakällor.\n\nEn fantastisk möjlighet att lära oss hur digitalisering skapar nya möjligheter i såväl skolan som arbetslivet.', + imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', + fullImageUrl: + 'https://live.staticflickr.com/4063/4369776892_5cd42d27ba.jpg', + imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', + published: dates.fourDaysAgo.toISO(), + modified: dates.fourDaysAgo.plus({ minutes: 45 }).toISO(), + }, + { + id: 'asdfasdfasdfs', + author: 'Magister Svensson', + header: 'Läxor i veckan', + intro: 'Alla elever måste göra sina läxor!', + body: '## Läxor vecka 6 \n\nFöljande läxor är obligatoriska:\n\n- Antikens historia\n- Svenska stormaktstiden\n- Statistik A\n- Flerdimensionell analys, del 1', + imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', + fullImageUrl: + 'https://www.mitti.se/_internal/cimg!0/ejf8efxee735ymm8tm40q3hhkl36sdt.jpeg', + imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', + published: dates.oneWeekAgo.toISO(), + modified: dates.oneWeekAgo.toISO(), + }, + { + id: 'asdfasdfasdfd', + author: 'Information från Förskoleklass', + header: 'Vinteraktiviteter', + intro: + 'Vi kommer efter att förskoleklassen är slut arrangera olika vinteraktiviteter genom fridtidsverksamheten.', + body: '## Vänligen ta med hjälm, skridskor eller stjärtlapp.\n\n ![Bild](https://images.unsplash.com/photo-1495377701095-00261b767581?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=988&q=80)\n\n Alla barn måste ha hjälm på sig samt varma kläder. Vi kommer åka i backen bakom skolbyggnaden samt använda isen som spolats vid Mullsjöskolan. Personal kommer finnas på plats samt att vi erbjuda varm dryck, frukt och lek för de barn som ej har hjälm eller lämpligt åkdon.', + imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', + fullImageUrl: 'https://unsplash.com/photos/yB_aiAWkm40', + imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', + published: dates.oneWeekAgo.minus({ weeks: 2 }).toISO(), + modified: dates.oneWeekAgo.minus({ weeks: 1 }).toISO(), + }, + { + id: 'asdfasdfasdfdsa', + author: 'Köket', + header: 'Ekologisk vecka i matsalen', + intro: 'Ekologiska veckan i matsalen vecka 11', + body: '## Vi kommer ha tema jorden i matsalen och servera ekologisk mat från hela världen med tema jorden. Detta för att belysa att man kan använda alla delar av råvaorna. Det kommer erbjudas rätter från alla världsdelar som är producerat för jordens bästa. Smaklig spis hälsar Gunnel i köket med personal.', + imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', + fullImageUrl: 'https://unsplash.com/photos/7K17MvT8qBg', + imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', + published: dates.oneWeekAgo.minus({ weeks: 3 }).toISO(), + modified: dates.oneWeekAgo.minus({ days: 2 }).toISO(), + }, + { + id: 'asdfasdfasdfbvdsa', + author: 'Vaktmästaren', + header: 'Klotter i korridoren (igen)', + intro: + 'Ännu en gång har vi råka ut för skadegörelse i korridorerna vid åk 5', + body: '## Tyvärr har flera elever klottat på skåp och väggar vid åk5 skåpen. Detta är helt oacceptablet beteende och kostar skolan stora belopp att åtgärda. Vi ber alla föräldrar prata med sina barn om klotter samt att det var väldigt grovt spårkbruk. Personalen på skolan kommer att hålla extra uppsikt och vi har även pratat med en del av de inblandade eleverna i denna skadegörelse.\n\nPersonalen har även börjat forska på vad vissa av de skrivna orden betyder och Eva-Britt är förfasad över språkbruket samt vad de innebär. Bernt kommer att påbörja saneringen och återställningen av skadegörelsen samt vakta korridorerna nogrannare för att säkerställa att detta ej kommer ske igen.\n\n Klotter\n\nUPPDATERING: Det som är skrivet om Sara är inte sant! ', + imageUrl: '6607f9b923edb6f85aa4417bab43c0f8.jpg', + fullImageUrl: 'https://unsplash.com/photos/SkbEZ16VywM', + imageAltText: 'Nyhetsbild. Bildtext ej tillgänglig.', + published: dates.oneWeekAgo.minus({ weeks: 4 }).toISO(), + modified: dates.oneWeekAgo.minus({ weeks: 2 }).toISO(), + }, + ], + ], ]) diff --git a/libs/api-skolplattformen/lib/fakeData/schoolContacts.ts b/libs/api-skolplattformen/lib/fakeData/schoolContacts.ts index 0f35aac7..fcedc29c 100644 --- a/libs/api-skolplattformen/lib/fakeData/schoolContacts.ts +++ b/libs/api-skolplattformen/lib/fakeData/schoolContacts.ts @@ -1,47 +1,52 @@ -import { SchoolContact, Child } from '@skolplattformen/api'; +import { SchoolContact, Child } from '@skolplattformen/api' import { children } from './children' -export const schoolContacts = (child: Child): SchoolContact[] => schoolContactData.get(child.id) ?? [] +export const schoolContacts = (child: Child): SchoolContact[] => + schoolContactData.get(child.id) ?? [] -const [child1,child2] = children() +const [child1, child2] = children() const schoolContactData = new Map([ [ - child1.id, [ + child1.id, + [ { - title: "Expedition", + title: 'Expedition', name: undefined, - phone: "508 000 00", - email: "", - schoolName: "Vallaskolan", + phone: '508 000 00', + email: '', + schoolName: 'Vallaskolan', className: '', }, { - title: "Rektor", - name: "Alvar Sträng", - phone: "08-50800001", - email: "alvar.strang@edu.stockholm.se", + title: 'Rektor', + name: 'Alvar Sträng', + phone: '08-50800001', + email: 'alvar.strang@edu.stockholm.se', schoolName: '', className: '', - } - ]], + }, + ], + ], [ - child2.id, [ - { - title: "Expedition", - name: undefined, - phone: "508 000 00", - email: "", - schoolName: "Vallaskolan", - className: '', - }, - { - title: "Rektor", - name: "Alvar Sträng", - phone: "08-50800001", - email: "alvar.strang@edu.stockholm.se", - schoolName: '', - className: '', - } -]] + child2.id, + [ + { + title: 'Expedition', + name: undefined, + phone: '508 000 00', + email: '', + schoolName: 'Vallaskolan', + className: '', + }, + { + title: 'Rektor', + name: 'Alvar Sträng', + phone: '08-50800001', + email: 'alvar.strang@edu.stockholm.se', + schoolName: '', + className: '', + }, + ], + ], ]) diff --git a/libs/api-skolplattformen/lib/fakeData/teachers.ts b/libs/api-skolplattformen/lib/fakeData/teachers.ts index 1ee25240..bcb612ee 100644 --- a/libs/api-skolplattformen/lib/fakeData/teachers.ts +++ b/libs/api-skolplattformen/lib/fakeData/teachers.ts @@ -1,81 +1,86 @@ -import { Teacher, Child } from '@skolplattformen/api'; +import { Teacher, Child } from '@skolplattformen/api' import { children } from './children' -export const teachers = (child: Child): Teacher[] => teacherData.get(child.id) ?? [] +export const teachers = (child: Child): Teacher[] => + teacherData.get(child.id) ?? [] -const [child1,child2] = children() +const [child1, child2] = children() const teacherData = new Map([ [ - child1.id, [ + child1.id, + [ { id: 15662220, - firstname: "Cecilia", + firstname: 'Cecilia', sisId: '', - lastname: "Test", - email: "cecilia.test@edu.stockholm.se", + lastname: 'Test', + email: 'cecilia.test@edu.stockholm.se', phoneWork: undefined, active: true, - status: " S", + status: ' S', timeTableAbbreviation: 'CTE', }, { id: 15662221, - firstname: "Anna", - lastname: "Test", + firstname: 'Anna', + lastname: 'Test', sisId: '', - email: "anna.test@edu.stockholm.se", + email: 'anna.test@edu.stockholm.se', phoneWork: '08000000', active: true, - status: " GR", + status: ' GR', timeTableAbbreviation: 'ATE', }, { id: 15662221, - firstname: "Greta", - lastname: "Test", + firstname: 'Greta', + lastname: 'Test', sisId: '', email: undefined, phoneWork: '08000001', active: true, - status: " F", + status: ' F', timeTableAbbreviation: 'GTE', }, - ]], -[ - child2.id, [ - { - id: 15662220, - firstname: "Cecilia", - sisId: '', - lastname: "Test", - email: "cecilia.test@edu.stockholm.se", - phoneWork: undefined, - active: true, - status: " S", - timeTableAbbreviation: 'CTE', - }, - { - id: 15662221, - firstname: "Anna", - lastname: "Test", - sisId: '', - email: "anna.test@edu.stockholm.se", - phoneWork: '08000000', - active: true, - status: " GR", - timeTableAbbreviation: 'ATE', - }, - { - id: 15662221, - firstname: "Greta", - lastname: "Test", - sisId: '', - email: undefined, - phoneWork: '08000001', - active: true, - status: " F", - timeTableAbbreviation: 'GTE', - }, -]], + ], + ], + [ + child2.id, + [ + { + id: 15662220, + firstname: 'Cecilia', + sisId: '', + lastname: 'Test', + email: 'cecilia.test@edu.stockholm.se', + phoneWork: undefined, + active: true, + status: ' S', + timeTableAbbreviation: 'CTE', + }, + { + id: 15662221, + firstname: 'Anna', + lastname: 'Test', + sisId: '', + email: 'anna.test@edu.stockholm.se', + phoneWork: '08000000', + active: true, + status: ' GR', + timeTableAbbreviation: 'ATE', + }, + { + id: 15662221, + firstname: 'Greta', + lastname: 'Test', + sisId: '', + email: undefined, + phoneWork: '08000001', + active: true, + status: ' F', + timeTableAbbreviation: 'GTE', + }, + ], + ], ]) diff --git a/libs/api-skolplattformen/lib/fakeData/timetable.ts b/libs/api-skolplattformen/lib/fakeData/timetable.ts index f61bbf2c..bc4eeaee 100644 --- a/libs/api-skolplattformen/lib/fakeData/timetable.ts +++ b/libs/api-skolplattformen/lib/fakeData/timetable.ts @@ -1,5 +1,4 @@ -import { Skola24Child, TimetableEntry } from "@skolplattformen/api" - +import { Skola24Child, TimetableEntry } from '@skolplattformen/api' export const timetable = (child: Skola24Child): TimetableEntry[] => { if (!child.personGuid || !child.unitGuid) return [] @@ -460,6 +459,6 @@ export const timetable = (child: Skola24Child): TimetableEntry[] => { timeStart: '10:40:00', dateStart: '2021-04-16T10:40:00.000+02:00', dateEnd: '2021-04-16T11:35:00.000+02:00', - } + }, ] } diff --git a/libs/api-skolplattformen/lib/frejaLoginStatusChecker.ts b/libs/api-skolplattformen/lib/frejaLoginStatusChecker.ts index 718b6c39..fd270fd1 100644 --- a/libs/api-skolplattformen/lib/frejaLoginStatusChecker.ts +++ b/libs/api-skolplattformen/lib/frejaLoginStatusChecker.ts @@ -1,50 +1,57 @@ -import { EventEmitter } from 'events'; -import { frejaLoginStatus } from './routes'; -import { Fetcher, FrejaLoginStatusChecker, RequestInit } from '@skolplattformen/api'; -export class FrejaChecker extends EventEmitter implements FrejaLoginStatusChecker { - public token: string; +import { EventEmitter } from 'events' +import { frejaLoginStatus } from './routes' +import { + Fetcher, + FrejaLoginStatusChecker, + RequestInit, +} from '@skolplattformen/api' +export class FrejaChecker + extends EventEmitter + implements FrejaLoginStatusChecker +{ + public token: string - private fetcher: Fetcher - private url: string + private fetcher: Fetcher + private url: string - private cancelled = false; + private cancelled = false - constructor(fetcher: Fetcher, token: string) { - super(); - this.fetcher = fetcher + constructor(fetcher: Fetcher, token: string) { + super() + this.fetcher = fetcher - this.token = token - this.url = frejaLoginStatus; - this.check(); - } + this.token = token + this.url = frejaLoginStatus + this.check() + } - async check(): Promise { - const response = await this.fetcher('freja-login-status', this.url); - let status = await response.text(); + async check(): Promise { + const response = await this.fetcher('freja-login-status', this.url) + let status = await response.text() - // For Freja we recieve CANCELED (with one L) - BankId returns CANCELLED (with two L) - // To make the API consistent - we choose the same as BankId - two L - if (status === 'CANCELED') status = 'CANCELLED' + // For Freja we recieve CANCELED (with one L) - BankId returns CANCELLED (with two L) + // To make the API consistent - we choose the same as BankId - two L + if (status === 'CANCELED') status = 'CANCELLED' - console.debug(status) - this.emit(status); - if (!this.cancelled && - status !== 'APPROVED' && - status !== 'ERROR' && - status !== 'CANCELLED' - ){ - setTimeout(() => this.check(), 1000); - } - } - - async cancel(): Promise { - this.cancelled = true; + console.debug(status) + this.emit(status) + if ( + !this.cancelled && + status !== 'APPROVED' && + status !== 'ERROR' && + status !== 'CANCELLED' + ) { + setTimeout(() => this.check(), 1000) } } + async cancel(): Promise { + this.cancelled = true + } +} - export const checkStatus = ( - fetch: Fetcher, - token: string, - session: RequestInit - ): FrejaLoginStatusChecker => new FrejaChecker(fetch, token) +export const checkStatus = ( + fetch: Fetcher, + token: string, + session: RequestInit +): FrejaLoginStatusChecker => new FrejaChecker(fetch, token) diff --git a/libs/api-skolplattformen/lib/loginStatusChecker.ts b/libs/api-skolplattformen/lib/loginStatusChecker.ts index 0cdb4593..5d2c4e1e 100644 --- a/libs/api-skolplattformen/lib/loginStatusChecker.ts +++ b/libs/api-skolplattformen/lib/loginStatusChecker.ts @@ -1,49 +1,53 @@ -import { EventEmitter } from 'events'; -import { loginStatus } from './routes'; -import { AuthTicket, Fetcher, LoginStatusChecker } from '@skolplattformen/api'; +import { EventEmitter } from 'events' +import { loginStatus } from './routes' +import { AuthTicket, Fetcher, LoginStatusChecker } from '@skolplattformen/api' export class Checker extends EventEmitter implements LoginStatusChecker { - public token: string; + public token: string - private fetcher: Fetcher; + private fetcher: Fetcher - private url: string; + private url: string - private cancelled = false; + private cancelled = false constructor(fetcher: Fetcher, ticket: AuthTicket) { - super(); - this.fetcher = fetcher; - this.url = loginStatus(ticket.order); - this.token = ticket.token; - this.check(); + super() + this.fetcher = fetcher + this.url = loginStatus(ticket.order) + this.token = ticket.token + this.check() } async check(): Promise { - const response = await this.fetcher('login-status', this.url); - const status = await response.text(); - this.emit(status); - if (!this.cancelled && + const response = await this.fetcher('login-status', this.url) + const status = await response.text() + this.emit(status) + if ( + !this.cancelled && status !== 'OK' && status !== 'ERROR!' && - status !== 'CANCELLED') { - setTimeout(() => this.check(), 1000); + status !== 'CANCELLED' + ) { + setTimeout(() => this.check(), 1000) } } async cancel(): Promise { - this.cancelled = true; + this.cancelled = true } } - export const checkStatus = ( fetch: Fetcher, ticket: AuthTicket ): LoginStatusChecker => new Checker(fetch, ticket) -export class DummyStatusChecker extends EventEmitter implements LoginStatusChecker { - token = "" +export class DummyStatusChecker + extends EventEmitter + implements LoginStatusChecker +{ + token = '' async cancel(): Promise { // do nothing } diff --git a/libs/api-skolplattformen/lib/parse/__tests__/news.test.ts b/libs/api-skolplattformen/lib/parse/__tests__/news.test.ts index 6da88eec..a652de83 100644 --- a/libs/api-skolplattformen/lib/parse/__tests__/news.test.ts +++ b/libs/api-skolplattformen/lib/parse/__tests__/news.test.ts @@ -19,7 +19,8 @@ describe('news', () => { NewsListId: '3EC323A1-EA16-4D24-84C8-DAA49E76F9F4', NewsItemId: 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700_99', - Header: 'Problemet med att se betyg i bild, slöjd och teknik löst!', + Header: + 'Problemet med att se betyg i bild, slöjd och teknik löst!', PublicationDate: '/Date(1608304542000)/', PubDateSE: '18 december 2020 16:15', ModifiedDate: '/Date(1608304680000)/', @@ -30,8 +31,7 @@ describe('news', () => { BannerImageUrl: 'A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg', BannerImageGuid: 'A703552D-DBF3-45B0-8E67-6E062105A0C5', BannerImageListId: 'FFBE49E9-BDE1-4C75-BA0E-D98D4E2FCF21', - Body: - '

Hej,

Nu är problemet löst! Alla betyg syns som de ska. 

God jul!

', + Body: '

Hej,

Nu är problemet löst! Alla betyg syns som de ska. 

God jul!

', BodyNoHtml: null, AuthorDisplayName: 'Eva-Lotta Rönnberg', altText: 'Nyhetsbild. Bildtext ej tillgänglig.', @@ -108,7 +108,8 @@ describe('news', () => { NewsListId: '3EC323A1-EA16-4D24-84C8-DAA49E76F9F4', NewsItemId: 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700_99', - Header: 'Problemet med att se betyg i bild, slöjd och teknik löst!', + Header: + 'Problemet med att se betyg i bild, slöjd och teknik löst!', PublicationDate: '/Date(1608304542000)/', PubDateSE: '18 december 2020 16:15', ModifiedDate: '/Date(1608304680000)/', @@ -119,8 +120,7 @@ describe('news', () => { BannerImageUrl: 'A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg', BannerImageGuid: 'A703552D-DBF3-45B0-8E67-6E062105A0C5', BannerImageListId: 'FFBE49E9-BDE1-4C75-BA0E-D98D4E2FCF21', - Body: - '

Hej,

Nu är problemet löst! Alla betyg syns som de ska. 

God jul!

', + Body: '

Hej,

Nu är problemet löst! Alla betyg syns som de ska. 

God jul!

', BodyNoHtml: null, AuthorDisplayName: 'Eva-Lotta Rönnberg', altText: 'Nyhetsbild. Bildtext ej tillgänglig.', @@ -132,7 +132,8 @@ describe('news', () => { NewsListId: '3EC323A1-EA16-4D24-84C8-DAA49E76F9F4', NewsItemId: 'elevstockholm.sharepoint.com,27892ACC-BA2E-4DEC-97B8-25F7098C3BF6,A239466A-9A52-42FF-8A3F-D94C342F2700_99', - Header: 'Problemet med att se betyg i bild, slöjd och teknik löst!', + Header: + 'Problemet med att se betyg i bild, slöjd och teknik löst!', PublicationDate: '/Date(1608304542000)/', PubDateSE: '18 november 2021 16:15', ModifiedDate: '/Date(1608304680000)/', @@ -143,8 +144,7 @@ describe('news', () => { BannerImageUrl: 'A703552D-DBF3-45B0-8E67-6E062105A0C5.jpeg', BannerImageGuid: 'A703552D-DBF3-45B0-8E67-6E062105A0C5', BannerImageListId: 'FFBE49E9-BDE1-4C75-BA0E-D98D4E2FCF21', - Body: - '

Hej,

Nu är problemet löst! Alla betyg syns som de ska. 

God jul!

', + Body: '

Hej,

Nu är problemet löst! Alla betyg syns som de ska. 

God jul!

', BodyNoHtml: null, AuthorDisplayName: 'Eva-Lotta Rönnberg', altText: 'Nyhetsbild. Bildtext ej tillgänglig.', @@ -206,8 +206,7 @@ describe('newsItem', () => { BannerImageUrl: '123123.jpeg', BannerImageGuid: '7a8142d9d9d54cf090e8457e4c629227', BannerImageListId: 'a88c22e8-7094-4a71-b4fd-8792c62a7b4a', - Body: - '

Kära vårdnadshavare!

I helgen är det avlusningsdagar! Ta tillfället i akt att luskamma ditt barn

Du finner all info du behöver på 1177 hemsida ​​​​​​​

Trevlig helg!

​​​​​​​

', + Body: '

Kära vårdnadshavare!

I helgen är det avlusningsdagar! Ta tillfället i akt att luskamma ditt barn

Du finner all info du behöver på 1177 hemsida ​​​​​​​

Trevlig helg!

​​​​​​​

', BodyNoHtml: null, AuthorDisplayName: 'Tieto Evry', altText: null, @@ -264,7 +263,6 @@ describe('newsItem', () => { }) }) - describe('newsItem', () => { beforeEach(() => { response = { @@ -288,8 +286,7 @@ describe('newsItem', () => { BannerImageUrl: '123123.jpeg', BannerImageGuid: '7a8142d9d9d54cf090e8457e4c629227', BannerImageListId: 'a88c22e8-7094-4a71-b4fd-8792c62a7b4a', - Body: - 'italic bold emphasis
strongnbsp ', + Body: 'italic bold emphasis
strongnbsp ', BodyNoHtml: null, AuthorDisplayName: 'Tieto Evry', altText: null, @@ -330,4 +327,4 @@ describe('newsItem', () => { expect(item.body).toContain('**strong**') expect(item.body).toContain('**nbsp**') }) -}) \ No newline at end of file +}) diff --git a/libs/api-skolplattformen/lib/parse/__tests__/notifications.test.ts b/libs/api-skolplattformen/lib/parse/__tests__/notifications.test.ts index b65f2ee0..567f7b30 100644 --- a/libs/api-skolplattformen/lib/parse/__tests__/notifications.test.ts +++ b/libs/api-skolplattformen/lib/parse/__tests__/notifications.test.ts @@ -56,7 +56,7 @@ it(' notifications correctly', () => { sender: 'Elevdokumentation', url: 'https://elevdokumentation.stockholm.se/loa3/gradesStudent.do', dateCreated: '2020-12-18T14:59:46.340Z', - dateModified: "2020-12-18T15:59:46.340Z", + dateModified: '2020-12-18T15:59:46.340Z', category: null, type: 'webnotify', }, diff --git a/libs/api-skolplattformen/lib/parse/__tests__/schoolContacts.test.ts b/libs/api-skolplattformen/lib/parse/__tests__/schoolContacts.test.ts index 30e60d1f..b2d5cdc2 100644 --- a/libs/api-skolplattformen/lib/parse/__tests__/schoolContacts.test.ts +++ b/libs/api-skolplattformen/lib/parse/__tests__/schoolContacts.test.ts @@ -5,46 +5,46 @@ let response: EtjanstResponse beforeEach(() => { response = { - "Success": true, - "Error": null, - "Data": [ - { - "Title": "Expedition", - "Name": null, - "Phone": "508 000 00", - "Email": "", - "SchoolName": "Påhittade skolan", - "ClassName": null - }, - { - "Title": "Rektor", - "Name": "Andersson, Anna Bella Cecilia", - "Phone": "08-508 000 00", - "Email": "anna.anderssonn@edu.stockholm.se", - "SchoolName": null, - "ClassName": null - } - ] - } + Success: true, + Error: null, + Data: [ + { + Title: 'Expedition', + Name: null, + Phone: '508 000 00', + Email: '', + SchoolName: 'Påhittade skolan', + ClassName: null, + }, + { + Title: 'Rektor', + Name: 'Andersson, Anna Bella Cecilia', + Phone: '08-508 000 00', + Email: 'anna.anderssonn@edu.stockholm.se', + SchoolName: null, + ClassName: null, + }, + ], + } }) it('parses teachers correctly', () => { expect(schoolContacts(response)).toEqual([ { - title: 'Expedition', - name: null, - phone: '508 000 00', - email: '', - schoolName: 'Påhittade skolan', - className: null - }, - { - title: 'Rektor', - name: 'Andersson, Anna Bella Cecilia', - phone: '08-508 000 00', - email: 'anna.anderssonn@edu.stockholm.se', - schoolName: null, - className: null - } + title: 'Expedition', + name: null, + phone: '508 000 00', + email: '', + schoolName: 'Påhittade skolan', + className: null, + }, + { + title: 'Rektor', + name: 'Andersson, Anna Bella Cecilia', + phone: '08-508 000 00', + email: 'anna.anderssonn@edu.stockholm.se', + schoolName: null, + className: null, + }, ]) }) diff --git a/libs/api-skolplattformen/lib/parse/__tests__/teachers.test.ts b/libs/api-skolplattformen/lib/parse/__tests__/teachers.test.ts index 26d44159..cda0583b 100644 --- a/libs/api-skolplattformen/lib/parse/__tests__/teachers.test.ts +++ b/libs/api-skolplattformen/lib/parse/__tests__/teachers.test.ts @@ -5,64 +5,64 @@ let response: EtjanstResponse beforeEach(() => { response = { - "Success": true, - "Error": null, - "Data": [ + Success: true, + Error: null, + Data: [ { - "ID": 156735, - "BATCH": "GR", - "SIS_ID": "F154239A-EA4A-4C6C-A112-0B9581132E3D", - "USERNAME": "anna.andersson", - "SCHOOL_SIS_ID": "DE2E1293-0F40-4B91-9D91-1E99355DC257", - "EMAILADDRESS": null, - "STATUS": " GR", - "ERRORCODE": 0, - "FIRSTNAME": "Anna", - "LASTNAME": "Andersson", - "ACTIVE": true, - "TELWORK": "08 508 0000000" + ID: 156735, + BATCH: 'GR', + SIS_ID: 'F154239A-EA4A-4C6C-A112-0B9581132E3D', + USERNAME: 'anna.andersson', + SCHOOL_SIS_ID: 'DE2E1293-0F40-4B91-9D91-1E99355DC257', + EMAILADDRESS: null, + STATUS: ' GR', + ERRORCODE: 0, + FIRSTNAME: 'Anna', + LASTNAME: 'Andersson', + ACTIVE: true, + TELWORK: '08 508 0000000', }, { - "ID": 156690, - "BATCH": "GR", - "SIS_ID": "9EC59FCA-80AD-4774-AABD-427040207E33", - "USERNAME": "gunnar.grymm", - "SCHOOL_SIS_ID": "DE2E1293-0F40-4B91-9D91-1E99355DC257", - "EMAILADDRESS": "gunnar.grymm@edu.stockholm.se", - "STATUS": " F", - "ERRORCODE": 0, - "FIRSTNAME": "Gunnar", - "LASTNAME": "Grymm", - "ACTIVE": true, - "TELWORK": null - } - ] - } + ID: 156690, + BATCH: 'GR', + SIS_ID: '9EC59FCA-80AD-4774-AABD-427040207E33', + USERNAME: 'gunnar.grymm', + SCHOOL_SIS_ID: 'DE2E1293-0F40-4B91-9D91-1E99355DC257', + EMAILADDRESS: 'gunnar.grymm@edu.stockholm.se', + STATUS: ' F', + ERRORCODE: 0, + FIRSTNAME: 'Gunnar', + LASTNAME: 'Grymm', + ACTIVE: true, + TELWORK: null, + }, + ], + } }) it('parses teachers correctly', () => { expect(teachers(response)).toEqual([ { - id: 156735, - sisId: 'F154239A-EA4A-4C6C-A112-0B9581132E3D', - firstname: 'Anna', - lastname: 'Andersson', - email: null, - phoneWork: '08 508 0000000', - active: true, - status: ' GR', - timeTableAbbreviation: 'AAN' - }, - { - id: 156690, - sisId: '9EC59FCA-80AD-4774-AABD-427040207E33', - firstname: 'Gunnar', - lastname: 'Grymm', - email: 'gunnar.grymm@edu.stockholm.se', - phoneWork: null, - active: true, - status: ' F', - timeTableAbbreviation: 'GGR' - }, + id: 156735, + sisId: 'F154239A-EA4A-4C6C-A112-0B9581132E3D', + firstname: 'Anna', + lastname: 'Andersson', + email: null, + phoneWork: '08 508 0000000', + active: true, + status: ' GR', + timeTableAbbreviation: 'AAN', + }, + { + id: 156690, + sisId: '9EC59FCA-80AD-4774-AABD-427040207E33', + firstname: 'Gunnar', + lastname: 'Grymm', + email: 'gunnar.grymm@edu.stockholm.se', + phoneWork: null, + active: true, + status: ' F', + timeTableAbbreviation: 'GGR', + }, ]) }) diff --git a/libs/api-skolplattformen/lib/parse/__tests__/timetable.test.ts b/libs/api-skolplattformen/lib/parse/__tests__/timetable.test.ts index b3b7363d..4ab1511f 100644 --- a/libs/api-skolplattformen/lib/parse/__tests__/timetable.test.ts +++ b/libs/api-skolplattformen/lib/parse/__tests__/timetable.test.ts @@ -18,7 +18,7 @@ describe('Timetable', () => { italic: false, id: 9, parentId: 6, - type: 'ClockAxisBox' + type: 'ClockAxisBox', }, { x: 11, @@ -30,7 +30,7 @@ describe('Timetable', () => { italic: false, id: 12, parentId: 6, - type: 'ClockAxisBox' + type: 'ClockAxisBox', }, ], boxList: [ @@ -44,7 +44,7 @@ describe('Timetable', () => { id: 0, parentId: null, type: 'Footer', - lessonGuids: null + lessonGuids: null, }, { x: 56, @@ -56,7 +56,7 @@ describe('Timetable', () => { id: 1, parentId: null, type: 'HeadingDay', - lessonGuids: null + lessonGuids: null, }, ], lineList: [ @@ -68,7 +68,7 @@ describe('Timetable', () => { color: '#000000', id: 7, parentId: 6, - type: 'ClockAxisGradiation' + type: 'ClockAxisGradiation', }, { p1x: 0, @@ -78,35 +78,27 @@ describe('Timetable', () => { color: '#000000', id: 8, parentId: 6, - type: 'ClockAxisGradiation' + type: 'ClockAxisGradiation', }, ], lessonInfo: [ { guidId: 'N2FjMDc1NjYtZmM2Yy0wZDQyLTY3M2YtZWI5NGNiZDA3ZGU4', - texts: [ - 'Lunch', - '', - 'Ö5' - ], + texts: ['Lunch', '', 'Ö5'], timeStart: '11:40:00', timeEnd: '12:05:00', dayOfWeekNumber: 1, - blockName: '' + blockName: '', }, { guidId: 'ZTQ1NWE0N2EtNzAwOS0wZTAzLTQ1ZDYtNTA1NWI4Y2JhNDYw', - texts: [ - 'BL', - 'KUr', - '221' - ], + texts: ['BL', 'KUr', '221'], timeStart: '09:40:00', timeEnd: '11:35:00', dayOfWeekNumber: 1, - blockName: 'block' + blockName: 'block', }, - ] + ], }, exception: null, validation: [], @@ -116,7 +108,9 @@ describe('Timetable', () => { it('parses basic timeTableEntry data correctly', () => { const entry = timetableEntry(response.data.lessonInfo[1], 2021, 15, 'sv') - expect(entry.id).toEqual('ZTQ1NWE0N2EtNzAwOS0wZTAzLTQ1ZDYtNTA1NWI4Y2JhNDYw') + expect(entry.id).toEqual( + 'ZTQ1NWE0N2EtNzAwOS0wZTAzLTQ1ZDYtNTA1NWI4Y2JhNDYw' + ) expect(entry.code).toEqual('BL') expect(entry.name).toEqual('Bild') expect(entry.teacher).toEqual('KUr') @@ -142,8 +136,12 @@ describe('Timetable', () => { const table = timetable(response, 2021, 15, 'sv') expect(table).toHaveLength(2) - expect(table[0].id).toEqual('N2FjMDc1NjYtZmM2Yy0wZDQyLTY3M2YtZWI5NGNiZDA3ZGU4') - expect(table[1].id).toEqual('ZTQ1NWE0N2EtNzAwOS0wZTAzLTQ1ZDYtNTA1NWI4Y2JhNDYw') + expect(table[0].id).toEqual( + 'N2FjMDc1NjYtZmM2Yy0wZDQyLTY3M2YtZWI5NGNiZDA3ZGU4' + ) + expect(table[1].id).toEqual( + 'ZTQ1NWE0N2EtNzAwOS0wZTAzLTQ1ZDYtNTA1NWI4Y2JhNDYw' + ) }) }) }) diff --git a/libs/api-skolplattformen/lib/parse/menu.ts b/libs/api-skolplattformen/lib/parse/menu.ts index 076e46af..1ebd4513 100644 --- a/libs/api-skolplattformen/lib/parse/menu.ts +++ b/libs/api-skolplattformen/lib/parse/menu.ts @@ -1,7 +1,6 @@ import { MenuItem, MenuList, toMarkdown } from '@skolplattformen/api' import { etjanst } from './etjanst' - export const menuItem = ({ title, description }: any): MenuItem => ({ title, description: toMarkdown(description), @@ -24,7 +23,7 @@ export const menuList = (data: any): MenuItem[] => { const menuItemsFS = [ { title: `Måndag - Vecka ${currentWeek.week}`, - description: toMarkdown(currentWeek.mon) , + description: toMarkdown(currentWeek.mon), }, { title: `Tisdag - Vecka ${currentWeek.week}`, diff --git a/libs/api-skolplattformen/lib/parse/news.ts b/libs/api-skolplattformen/lib/parse/news.ts index ed66f39a..e96ed518 100644 --- a/libs/api-skolplattformen/lib/parse/news.ts +++ b/libs/api-skolplattformen/lib/parse/news.ts @@ -1,7 +1,6 @@ -import { NewsItem, parseDate, toMarkdown } from '@skolplattformen/api'; +import { NewsItem, parseDate, toMarkdown } from '@skolplattformen/api' import { etjanst } from './etjanst' - const IMAGE_HOST = 'https://etjanst.stockholm.se/Vardnadshavare/inloggad2/NewsBanner?url=' @@ -30,8 +29,8 @@ export const newsItem = ({ // Fixes https://github.com/kolplattformen/skolplattformen-app/issues/525 const toNonEmptyMarkdownString = (str: string): string => { - const res = toMarkdown(str); - if(res?.length == 0 ) return ' ' + const res = toMarkdown(str) + if (res?.length == 0) return ' ' return res } diff --git a/libs/api-skolplattformen/lib/parse/notifications.ts b/libs/api-skolplattformen/lib/parse/notifications.ts index 1d577776..fa2e0a41 100644 --- a/libs/api-skolplattformen/lib/parse/notifications.ts +++ b/libs/api-skolplattformen/lib/parse/notifications.ts @@ -25,7 +25,10 @@ export const notification = ({ type, }) -const notificationsSort = (item1: Notification, item2: Notification): number => { +const notificationsSort = ( + item1: Notification, + item2: Notification +): number => { const m1 = item1.dateModified || item1.dateCreated const m2 = item2.dateModified || item2.dateCreated return m1 < m2 ? 1 : -1 diff --git a/libs/api-skolplattformen/lib/parse/schedule.ts b/libs/api-skolplattformen/lib/parse/schedule.ts index f89817eb..118046be 100644 --- a/libs/api-skolplattformen/lib/parse/schedule.ts +++ b/libs/api-skolplattformen/lib/parse/schedule.ts @@ -20,19 +20,18 @@ export const scheduleItem = ({ }) export const schedule = (data: any): ScheduleItem[] => { - try{ + try { const scheduleData = etjanst(data) const mapped = scheduleData.map(scheduleItem) return mapped - } - catch(e){ + } catch (e) { if (e instanceof Error) { - // If this happens the child has no schedule + // If this happens the child has no schedule // It is the same on the official web // Instead of retrying and spamming errors - lets return en empty array - if(e.message === 'A task was canceled.'){ + if (e.message === 'A task was canceled.') { return new Array() - } + } } throw e } diff --git a/libs/api-skolplattformen/lib/parse/schoolContacts.ts b/libs/api-skolplattformen/lib/parse/schoolContacts.ts index e26b07ff..13d31085 100644 --- a/libs/api-skolplattformen/lib/parse/schoolContacts.ts +++ b/libs/api-skolplattformen/lib/parse/schoolContacts.ts @@ -2,21 +2,20 @@ import { etjanst } from './etjanst' import { SchoolContact } from '@skolplattformen/api' export const schoolContact = ({ - title, - name, - phone, - email, - schoolName, - className, + title, + name, + phone, + email, + schoolName, + className, }: any): SchoolContact => ({ - title, - name, - phone, - email, - schoolName, - className, + title, + name, + phone, + email, + schoolName, + className, }) - export const schoolContacts = (data: any): SchoolContact[] => etjanst(data).map(schoolContact) diff --git a/libs/api-skolplattformen/lib/parse/teachers.ts b/libs/api-skolplattformen/lib/parse/teachers.ts index cf694358..a4650f5b 100644 --- a/libs/api-skolplattformen/lib/parse/teachers.ts +++ b/libs/api-skolplattformen/lib/parse/teachers.ts @@ -1,8 +1,8 @@ import { etjanst } from './etjanst' import { Teacher } from '@skolplattformen/api' -const abbreviate = (firstname?: string, lastname?: string): string => - `${firstname?.substr(0,1)}${lastname?.substr(0,2)}`.toUpperCase() +const abbreviate = (firstname?: string, lastname?: string): string => + `${firstname?.substr(0, 1)}${lastname?.substr(0, 2)}`.toUpperCase() export const teacher = ({ id, @@ -22,8 +22,7 @@ export const teacher = ({ phoneWork: telwork, active, status, - timeTableAbbreviation: abbreviate(firstname, lastname) + timeTableAbbreviation: abbreviate(firstname, lastname), }) -export const teachers = (data: any): Teacher[] => - etjanst(data).map(teacher) +export const teachers = (data: any): Teacher[] => etjanst(data).map(teacher) diff --git a/libs/api-skolplattformen/lib/parse/timetable.ts b/libs/api-skolplattformen/lib/parse/timetable.ts index 3719245e..5b126d72 100644 --- a/libs/api-skolplattformen/lib/parse/timetable.ts +++ b/libs/api-skolplattformen/lib/parse/timetable.ts @@ -85,8 +85,8 @@ export const timetable = ( throw new Error(response.error) } - if(!response.data.lessonInfo){ - throw new Error("Empty lessonInfo received") + if (!response.data.lessonInfo) { + throw new Error('Empty lessonInfo received') } return response.data.lessonInfo.map((entry) => diff --git a/libs/api-skolplattformen/lib/parse/user.ts b/libs/api-skolplattformen/lib/parse/user.ts index cefe93bc..e6de7a58 100644 --- a/libs/api-skolplattformen/lib/parse/user.ts +++ b/libs/api-skolplattformen/lib/parse/user.ts @@ -1,4 +1,4 @@ -import { User } from "@skolplattformen/api"; +import { User } from '@skolplattformen/api' export const user = ({ socialSecurityNumber, diff --git a/libs/api-skolplattformen/lib/queue/autoQueue.ts b/libs/api-skolplattformen/lib/queue/autoQueue.ts index a9894da5..d81a2595 100644 --- a/libs/api-skolplattformen/lib/queue/autoQueue.ts +++ b/libs/api-skolplattformen/lib/queue/autoQueue.ts @@ -29,13 +29,19 @@ export default class AutoQueue extends Queue { } public async dequeue() { - if (this.runningTasks >= this.maxConcurrentTasks) { return false } + if (this.runningTasks >= this.maxConcurrentTasks) { + return false + } - if (this.isPaused) { return false } + if (this.isPaused) { + return false + } const item = super.dequeue() - if (!item) { return false } + if (!item) { + return false + } try { this.runningTasks += 1 @@ -60,13 +66,15 @@ export default class AutoQueue extends Queue { public async start() { this.isPaused = false - // eslint-disable-next-line no-await-in-loop + while (await this.dequeue()) { // do nothing } } - public get runningTaskCount() { return this.runningTasks } + public get runningTaskCount() { + return this.runningTasks + } public getQueueStatus() { return this.queueStatus diff --git a/libs/api-skolplattformen/lib/queue/queue.ts b/libs/api-skolplattformen/lib/queue/queue.ts index 31014d18..1ad7c48c 100644 --- a/libs/api-skolplattformen/lib/queue/queue.ts +++ b/libs/api-skolplattformen/lib/queue/queue.ts @@ -1,11 +1,19 @@ export class Queue { private items: any[] - constructor() { this.items = [] } + constructor() { + this.items = [] + } - enqueue(item : any) { this.items.push(item) } + enqueue(item: any) { + this.items.push(item) + } - dequeue() { return this.items.shift() } + dequeue() { + return this.items.shift() + } - get size() { return this.items.length } + get size() { + return this.items.length + } } diff --git a/libs/api-skolplattformen/lib/queue/queueFetcher.ts b/libs/api-skolplattformen/lib/queue/queueFetcher.ts index d9209cf6..71d97afe 100644 --- a/libs/api-skolplattformen/lib/queue/queueFetcher.ts +++ b/libs/api-skolplattformen/lib/queue/queueFetcher.ts @@ -2,12 +2,12 @@ import AutoQueue from './autoQueue' import RoundRobinArray from './roundRobinArray' export interface QueueEntry { - id : string - queue : AutoQueue + id: string + queue: AutoQueue } -function delay(time : any) { - return new Promise(resolve => setTimeout(resolve, time)) +function delay(time: any) { + return new Promise((resolve) => setTimeout(resolve, time)) } /** @@ -17,15 +17,15 @@ function delay(time : any) { * Why? The external api uses state where the child must be selected * before any calls to News etc can be done. * -*/ + */ export default class QueueFetcher { private queues: RoundRobinArray - private currentRunningQueue : QueueEntry | undefined + private currentRunningQueue: QueueEntry | undefined - private changeChildFunc : (childId : string) => Promise + private changeChildFunc: (childId: string) => Promise - private lastChildId = '' + private lastChildId = '' private scheduleTimeout: any @@ -40,7 +40,7 @@ export default class QueueFetcher { * @param changeChildFunc function that is called to change the current * selected child on the server */ - constructor(changeChildFunc : (childId : string) => Promise) { + constructor(changeChildFunc: (childId: string) => Promise) { this.changeChildFunc = changeChildFunc this.queues = new RoundRobinArray(new Array()) } @@ -54,7 +54,7 @@ export default class QueueFetcher { * @returns a Promise that resolves when the Promise created by the func is resolved * (i.e. is dequeued and executed) */ - public async fetch(func : () => Promise, id : string) : Promise { + public async fetch(func: () => Promise, id: string): Promise { if (!this.queues.array.some((e) => e.id === id)) { const newQueue = new AutoQueue(10) this.queues.add({ id, queue: newQueue }) @@ -73,7 +73,9 @@ export default class QueueFetcher { return promise } - public get Queues() { return this.queues.array } + public get Queues() { + return this.queues.array + } /** * Method to schedule next queue @@ -81,10 +83,9 @@ export default class QueueFetcher { */ async schedule() { // Debug print info for all queues - this.queues.array.forEach(({ id: childId, queue }) => this.debug( - 'Schedule: ', - childId, '=>', queue.getQueueInfo(), - )) + this.queues.array.forEach(({ id: childId, queue }) => + this.debug('Schedule: ', childId, '=>', queue.getQueueInfo()) + ) if (this.queues.size === 0) { this.debug('No queues created yet') @@ -130,11 +131,10 @@ export default class QueueFetcher { }) } - private async runNext(queueToRun : QueueEntry) { + private async runNext(queueToRun: QueueEntry) { const { id: childId, queue } = queueToRun this.debug('About to run', childId, queue.getQueueInfo()) - if (this.lastChildId === childId) { this.debug('Child already selected, skipping select call') } else { @@ -154,20 +154,21 @@ export default class QueueFetcher { this.scheduleTimeout = setTimeout(async () => this.schedule(), 3000) } - private findNextQueueToRun() : QueueEntry | undefined { + private findNextQueueToRun(): QueueEntry | undefined { // Iterate all queues and look for next queue with work to do for (let i = 0; i < this.queues.size; i += 1) { const { id: childId, queue } = this.queues.next() // If queue has items to execute, return it - if (queue.size > 0 || queue.runningTaskCount > 0) return { id: childId, queue } + if (queue.size > 0 || queue.runningTaskCount > 0) + return { id: childId, queue } } // Nothing more to do return undefined } - private debug(message : any, ...args : any[]) { + private debug(message: any, ...args: any[]) { if (this.verboseDebug) { console.debug(message, ...args) } diff --git a/libs/api-skolplattformen/lib/queue/roundRobinArray.ts b/libs/api-skolplattformen/lib/queue/roundRobinArray.ts index 5815ad1d..963944a0 100644 --- a/libs/api-skolplattformen/lib/queue/roundRobinArray.ts +++ b/libs/api-skolplattformen/lib/queue/roundRobinArray.ts @@ -3,7 +3,7 @@ export default class RoundRobinArray { array: T[] - constructor(array : Array, index?: number | undefined) { + constructor(array: Array, index?: number | undefined) { this.index = index || 0 if (array === undefined || array === null) { @@ -20,11 +20,15 @@ export default class RoundRobinArray { return this.array[this.index] } - add(item : T) { + add(item: T) { this.array.push(item) } - get first() { return this.array[0] } + get first() { + return this.array[0] + } - get size() { return this.array.length } + get size() { + return this.array.length + } } diff --git a/libs/api-skolplattformen/lib/queueFetcherWrapper.ts b/libs/api-skolplattformen/lib/queueFetcherWrapper.ts index 08110196..fb9eec60 100644 --- a/libs/api-skolplattformen/lib/queueFetcherWrapper.ts +++ b/libs/api-skolplattformen/lib/queueFetcherWrapper.ts @@ -1,14 +1,19 @@ import QueueFetcher from './queue/queueFetcher' -import {Fetcher, RequestInit, Response } from '@skolplattformen/api' +import { Fetcher, RequestInit, Response } from '@skolplattformen/api' - -export default function queueFetcherWrapper(fetch: Fetcher, - changeChildFunc: ((childId: string) => Promise)) : Fetcher { +export default function queueFetcherWrapper( + fetch: Fetcher, + changeChildFunc: (childId: string) => Promise +): Fetcher { const queue = new QueueFetcher(changeChildFunc) queue.verboseDebug = false - return async (name: string, url: string, init: RequestInit = { headers: {} }, childId? : string) - : Promise => { + return async ( + name: string, + url: string, + init: RequestInit = { headers: {} }, + childId?: string + ): Promise => { if (childId === undefined) { return fetch(name, url, init) } diff --git a/libs/api-skolplattformen/lib/routes.ts b/libs/api-skolplattformen/lib/routes.ts index 08180d73..399d47df 100644 --- a/libs/api-skolplattformen/lib/routes.ts +++ b/libs/api-skolplattformen/lib/routes.ts @@ -1,23 +1,27 @@ // BankId export const login = (personalNumber?: string) => { - const baseUrl = 'https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvaGVt' - const optionalPersonalNumber = personalNumber === undefined ? '' : `&personalNumber=${personalNumber}` + const baseUrl = + 'https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvaGVt' + const optionalPersonalNumber = + personalNumber === undefined ? '' : `&personalNumber=${personalNumber}` return `${baseUrl}&initialize=bankid${optionalPersonalNumber}&_=${Date.now()}` } - export const loginStatus = (order: string) => +export const loginStatus = (order: string) => `https://login003.stockholm.se/NECSadcmbid/authenticate/NECSadcmbid?TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvaGVt&verifyorder=${order}&_=${Date.now()}` - export const loginCookie = +export const loginCookie = 'https://login003.stockholm.se/NECSadcmbid/authenticate/SiteMinderAuthADC?TYPE=33554433&REALMOID=06-42f40edd-0c5b-4dbc-b714-1be1e907f2de&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2fmbid%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvR2V0Q2hpbGRyZW4%3d' - // Freja -export const frejaLogin = 'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?action=init&return_url=https%3A%2F%2Flogin003.stockholm.se%2FNECSadcfreja%2Fauthenticate%2FNECSadcfreja' -export const frejaLoginStatus = 'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvaGVt&action=checkstatus' -export const frejaReturnUrl = 'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvT3ZlcnNpa3Q%3d' -export const frejaLoginCookie = 'https://login003.stockholm.se/NECSadcfreja/authenticate/SiteMinderAuthADCFREJA?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvT3ZlcnNpa3Q%3d' - +export const frejaLogin = + 'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?action=init&return_url=https%3A%2F%2Flogin003.stockholm.se%2FNECSadcfreja%2Fauthenticate%2FNECSadcfreja' +export const frejaLoginStatus = + 'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=1&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvaGVt&action=checkstatus' +export const frejaReturnUrl = + 'https://login003.stockholm.se/NECSadcfreja/authenticate/NECSadcfreja?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvT3ZlcnNpa3Q%3d' +export const frejaLoginCookie = + 'https://login003.stockholm.se/NECSadcfreja/authenticate/SiteMinderAuthADCFREJA?TYPE=33554433&REALMOID=06-89cf916c-9764-45fa-8690-eaf3fe9282bc&GUID=&SMAUTHREASON=0&METHOD=GET&SMAGENTNAME=IfNE0iMOtzq2TcxFADHylR6rkmFtwzoxRKh5nRMO9NBqIxHrc38jFyt56FASdxk1&TARGET=-SM-HTTPS%3a%2f%2flogin001%2estockholm%2ese%2fNECSadc%2ffreja%2fb64startpage%2ejsp%3fstartpage%3daHR0cHM6Ly9ldGphbnN0LnN0b2NraG9sbS5zZS92YXJkbmFkc2hhdmFyZS9pbmxvZ2dhZDIvT3ZlcnNpa3Q%3d' const urlLoggedIn = `https://etjanst.stockholm.se/vardnadshavare/inloggad2` @@ -47,7 +51,7 @@ export const newsDetails = (childId: string, newsId: string) => export const image = (url: string) => `${urlLoggedIn}/NewsBanner?url=${url}` export const notifications = (childId: string) => - `${urlLoggedIn}/notifications/getnotifications?childId=${childId}` + `${urlLoggedIn}/notifications/getnotifications?childId=${childId}` export const menuRss = (childId: string) => `${urlLoggedIn}/Matsedel/GetMatsedelRSS?childId=${childId}` @@ -83,15 +87,21 @@ export const createItemConfig = // Skola24 export const ssoRequestUrl = (targetSystem: string) => - `https://fnsservicesso1.stockholm.se/sso-ng/saml-2.0/authenticate?customer=https://login001.stockholm.se&targetsystem=${targetSystem}` + `https://fnsservicesso1.stockholm.se/sso-ng/saml-2.0/authenticate?customer=https://login001.stockholm.se&targetsystem=${targetSystem}` -export const ssoResponseUrl = 'https://login001.stockholm.se/affwebservices/public/saml2sso' -export const samlResponseUrl = 'https://fnsservicesso1.stockholm.se/sso-ng/saml-2.0/response' +export const ssoResponseUrl = + 'https://login001.stockholm.se/affwebservices/public/saml2sso' +export const samlResponseUrl = + 'https://fnsservicesso1.stockholm.se/sso-ng/saml-2.0/response' -export const timetables = 'https://fns.stockholm.se/ng/api/services/skola24/get/personal/timetables' -export const renderKey = 'https://fns.stockholm.se/ng/api/get/timetable/render/key' +export const timetables = + 'https://fns.stockholm.se/ng/api/services/skola24/get/personal/timetables' +export const renderKey = + 'https://fns.stockholm.se/ng/api/get/timetable/render/key' export const timetable = 'https://fns.stockholm.se/ng/api/render/timetable' -export const topologyConfigUrl = 'https://fantomenkrypto.vercel.app/api/getConfig' +export const topologyConfigUrl = + 'https://fantomenkrypto.vercel.app/api/getConfig' -export const selectChild = 'https://etjanst.stockholm.se/vardnadshavare/inloggad2/SelectChild' +export const selectChild = + 'https://etjanst.stockholm.se/vardnadshavare/inloggad2/SelectChild' diff --git a/libs/api-skolplattformen/test-setup.ts b/libs/api-skolplattformen/test-setup.ts index 9f28ad21..fbf15de8 100644 --- a/libs/api-skolplattformen/test-setup.ts +++ b/libs/api-skolplattformen/test-setup.ts @@ -1 +1 @@ -import '@testing-library/jest-native/extend-expect'; +import '@testing-library/jest-native/extend-expect' diff --git a/libs/hooks/src/middleware.ts b/libs/hooks/src/middleware.ts index 40efb613..9f67959c 100644 --- a/libs/hooks/src/middleware.ts +++ b/libs/hooks/src/middleware.ts @@ -70,7 +70,6 @@ export const apiMiddleware: IMiddleware = } } } catch (err) { - // eslint-disable-next-line no-console console.error(err) } return next(action) @@ -105,7 +104,6 @@ export const cacheMiddleware: IMiddleware = } } } catch (err) { - // eslint-disable-next-line no-console console.error(err) } return next(action) diff --git a/libs/hooks/src/provider.tsx b/libs/hooks/src/provider.tsx index c90a4f7a..1df6e530 100644 --- a/libs/hooks/src/provider.tsx +++ b/libs/hooks/src/provider.tsx @@ -54,7 +54,6 @@ export const ApiProvider: TApiProvider = ({ api.off('login', handler) api.off('logout', handler) } - // eslint-disable-next-line react-hooks/exhaustive-deps }, [api]) return ( diff --git a/libs/hooks/src/store.ts b/libs/hooks/src/store.ts index 38a9e219..15cc85a9 100644 --- a/libs/hooks/src/store.ts +++ b/libs/hooks/src/store.ts @@ -33,7 +33,6 @@ const appReducer = combineReducers({ }) const rootReducer: typeof appReducer = (state, action) => { if (action.type === 'CLEAR') { - // eslint-disable-next-line no-param-reassign state = undefined } return appReducer(state, action)