style: 💄 Add eslint rules to api-skolplattformen and autofix
Add react-native-community eslint rules to project and run autofix on all files.
This commit is contained in:
parent
0508329998
commit
20ee509c28
|
@ -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": [
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import QueueFetcher from '../queue/queueFetcher'
|
||||
|
||||
let sut : QueueFetcher
|
||||
let sut: QueueFetcher
|
||||
beforeEach(() => {
|
||||
jest.useFakeTimers('legacy')
|
||||
sut = new QueueFetcher(async () => '')
|
||||
|
|
|
@ -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'))
|
||||
}
|
||||
|
|
|
@ -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<FrejaLoginStatusChecker> {
|
||||
|
||||
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<void> {
|
||||
// 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<void> {
|
||||
|
||||
const url = routes.loginCookie
|
||||
await this.fetch('login-cookie', url)
|
||||
}
|
||||
|
||||
private async retrieveFrejaSessionCookie(): Promise<void> {
|
||||
|
||||
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<SchoolContact[]> {
|
||||
if(this.isFake) return fakeResponse(fake.schoolContacts(child))
|
||||
public async getSchoolContacts(
|
||||
child: EtjanstChild
|
||||
): Promise<SchoolContact[]> {
|
||||
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<NewsItem | undefined> {
|
||||
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<EtjanstChild> {
|
||||
public async selectChild(child: EtjanstChild): Promise<EtjanstChild> {
|
||||
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
|
||||
}
|
||||
|
||||
|
|
|
@ -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',
|
||||
},
|
||||
]
|
||||
|
|
|
@ -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<string, Classmate[]>([
|
||||
[
|
||||
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',
|
||||
},
|
||||
],
|
||||
],
|
||||
]
|
||||
])
|
||||
|
|
|
@ -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[] =>
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -10,9 +10,9 @@ const week = getDate().weekNumber.toString()
|
|||
const [child1, child2] = children()
|
||||
|
||||
const menuData = new Map<string, MenuItem[]>([
|
||||
[
|
||||
child1.id,
|
||||
[
|
||||
[
|
||||
child1.id,
|
||||
[
|
||||
{
|
||||
title: 'Måndag - Vecka ' + week,
|
||||
description: 'Kebabgryta ris<br/>Ratatouille med kikärter',
|
||||
|
@ -37,28 +37,33 @@ const menuData = new Map<string, MenuItem[]>([
|
|||
},
|
||||
],
|
||||
],
|
||||
[child2.id,
|
||||
[
|
||||
child2.id,
|
||||
[
|
||||
{
|
||||
title: "Måndag - Vecka " + week,
|
||||
description: "Thailändsk kycklinggryta med kokosmjölk, rödcurry och jasminris<br/>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<br/>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<br/>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<br/>Spagetti med rostade bönor , grädde , dijon och persilja',
|
||||
},
|
||||
{
|
||||
title: "Torsdag - Vecka " + week,
|
||||
description: "Panerad flundra med dansk remoulad och koktåotatis<br/>morot och linsbiff med danska remoulad och koktpotatis"
|
||||
title: 'Torsdag - Vecka ' + week,
|
||||
description:
|
||||
'Panerad flundra med dansk remoulad och koktåotatis<br/>morot och linsbiff med danska remoulad och koktpotatis',
|
||||
},
|
||||
{
|
||||
title: "Fredag - Vecka " + week,
|
||||
description: "Texaschili på högrev med picklad rödlök och bulgur<br/>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<br/>Texaschili på svartabönor picklad rödlök och bulgur',
|
||||
},
|
||||
],
|
||||
]
|
||||
],
|
||||
])
|
||||
|
|
|
@ -7,137 +7,132 @@ export const news = (child: Child): NewsItem[] => newsData.get(child.id) ?? []
|
|||
const [child1, child2] = children()
|
||||
|
||||
const newsData = new Map<string, NewsItem[]>([
|
||||
[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(),
|
||||
},
|
||||
],
|
||||
],
|
||||
])
|
||||
|
|
|
@ -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<string, SchoolContact[]>([
|
||||
[
|
||||
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: '',
|
||||
},
|
||||
],
|
||||
],
|
||||
])
|
||||
|
|
|
@ -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<string, Teacher[]>([
|
||||
[
|
||||
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',
|
||||
},
|
||||
],
|
||||
],
|
||||
])
|
||||
|
|
|
@ -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',
|
||||
}
|
||||
},
|
||||
]
|
||||
}
|
||||
|
|
|
@ -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<void> {
|
||||
const response = await this.fetcher('freja-login-status', this.url);
|
||||
let status = await response.text();
|
||||
async check(): Promise<void> {
|
||||
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<void> {
|
||||
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<void> {
|
||||
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)
|
||||
|
|
|
@ -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<void> {
|
||||
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<void> {
|
||||
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<void> {
|
||||
// do nothing
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
'<div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":4,"id":"1212fc8d-dd6b-408a-8d5d-9f1cc787efbb","position":{"controlIndex":2,"sectionIndex":1,"sectionFactor":12,"zoneIndex":1,"layoutIndex":1},"addedFromPersistedData":true,"emphasis":{}}"><div data-sp-rte=""><p>Hej,</p><p>Nu är problemet löst! Alla betyg syns som de ska. </p><p>God jul!</p></div></div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":0,"pageSettingsSlice":{"isDefaultDescription":true,"isDefaultThumbnail":true}}"></div></div>',
|
||||
Body: '<div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":4,"id":"1212fc8d-dd6b-408a-8d5d-9f1cc787efbb","position":{"controlIndex":2,"sectionIndex":1,"sectionFactor":12,"zoneIndex":1,"layoutIndex":1},"addedFromPersistedData":true,"emphasis":{}}"><div data-sp-rte=""><p>Hej,</p><p>Nu är problemet löst! Alla betyg syns som de ska. </p><p>God jul!</p></div></div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":0,"pageSettingsSlice":{"isDefaultDescription":true,"isDefaultThumbnail":true}}"></div></div>',
|
||||
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:
|
||||
'<div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":4,"id":"1212fc8d-dd6b-408a-8d5d-9f1cc787efbb","position":{"controlIndex":2,"sectionIndex":1,"sectionFactor":12,"zoneIndex":1,"layoutIndex":1},"addedFromPersistedData":true,"emphasis":{}}"><div data-sp-rte=""><p>Hej,</p><p>Nu är problemet löst! Alla betyg syns som de ska. </p><p>God jul!</p></div></div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":0,"pageSettingsSlice":{"isDefaultDescription":true,"isDefaultThumbnail":true}}"></div></div>',
|
||||
Body: '<div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":4,"id":"1212fc8d-dd6b-408a-8d5d-9f1cc787efbb","position":{"controlIndex":2,"sectionIndex":1,"sectionFactor":12,"zoneIndex":1,"layoutIndex":1},"addedFromPersistedData":true,"emphasis":{}}"><div data-sp-rte=""><p>Hej,</p><p>Nu är problemet löst! Alla betyg syns som de ska. </p><p>God jul!</p></div></div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":0,"pageSettingsSlice":{"isDefaultDescription":true,"isDefaultThumbnail":true}}"></div></div>',
|
||||
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:
|
||||
'<div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":4,"id":"1212fc8d-dd6b-408a-8d5d-9f1cc787efbb","position":{"controlIndex":2,"sectionIndex":1,"sectionFactor":12,"zoneIndex":1,"layoutIndex":1},"addedFromPersistedData":true,"emphasis":{}}"><div data-sp-rte=""><p>Hej,</p><p>Nu är problemet löst! Alla betyg syns som de ska. </p><p>God jul!</p></div></div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":0,"pageSettingsSlice":{"isDefaultDescription":true,"isDefaultThumbnail":true}}"></div></div>',
|
||||
Body: '<div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":4,"id":"1212fc8d-dd6b-408a-8d5d-9f1cc787efbb","position":{"controlIndex":2,"sectionIndex":1,"sectionFactor":12,"zoneIndex":1,"layoutIndex":1},"addedFromPersistedData":true,"emphasis":{}}"><div data-sp-rte=""><p>Hej,</p><p>Nu är problemet löst! Alla betyg syns som de ska. </p><p>God jul!</p></div></div><div data-sp-canvascontrol="" data-sp-canvasdataversion="1.0" data-sp-controldata="{"controlType":0,"pageSettingsSlice":{"isDefaultDescription":true,"isDefaultThumbnail":true}}"></div></div>',
|
||||
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:
|
||||
'<div data-sp-rte=""><p><span><span><span>Kära vårdnadshavare!</span></span></span></p><p><span><span><span>I helgen är det avlusningsdagar! Ta <strong>tillfället </strong>i akt att luskamma ditt barn </span></span></span></p><p><span><span><span>Du finner all info du behöver på <a href="https://www.1177.se/sjukdomar--besvar/hud-har-och-naglar/harbotten-och-harsackar/huvudloss/" data-cke-saved-href="https://www.1177.se/sjukdomar--besvar/hud-har-och-naglar/harbotten-och-harsackar/huvudloss/" data-interception="on" title="https://www.1177.se/sjukdomar--besvar/hud-har-och-naglar/harbotten-och-harsackar/huvudloss/">1177 hemsida </a></span></span></span><span><span><span></span></span></span></p><p><span><span><span>Trevlig helg!</span></span></span></p><p><span><span><span></span></span></span></p></div>',
|
||||
Body: '<div data-sp-rte=""><p><span><span><span>Kära vårdnadshavare!</span></span></span></p><p><span><span><span>I helgen är det avlusningsdagar! Ta <strong>tillfället </strong>i akt att luskamma ditt barn </span></span></span></p><p><span><span><span>Du finner all info du behöver på <a href="https://www.1177.se/sjukdomar--besvar/hud-har-och-naglar/harbotten-och-harsackar/huvudloss/" data-cke-saved-href="https://www.1177.se/sjukdomar--besvar/hud-har-och-naglar/harbotten-och-harsackar/huvudloss/" data-interception="on" title="https://www.1177.se/sjukdomar--besvar/hud-har-och-naglar/harbotten-och-harsackar/huvudloss/">1177 hemsida </a></span></span></span><span><span><span></span></span></span></p><p><span><span><span>Trevlig helg!</span></span></span></p><p><span><span><span></span></span></span></p></div>',
|
||||
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:
|
||||
'<i>italic</i> <b>bold</b> <em>emphasis </em><br/><strong>strong</strong><strong>nbsp </strong>',
|
||||
Body: '<i>italic</i> <b>bold</b> <em>emphasis </em><br/><strong>strong</strong><strong>nbsp </strong>',
|
||||
BodyNoHtml: null,
|
||||
AuthorDisplayName: 'Tieto Evry',
|
||||
altText: null,
|
||||
|
@ -330,4 +327,4 @@ describe('newsItem', () => {
|
|||
expect(item.body).toContain('**strong**')
|
||||
expect(item.body).toContain('**nbsp**')
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -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',
|
||||
},
|
||||
|
|
|
@ -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,
|
||||
},
|
||||
])
|
||||
})
|
||||
|
|
|
@ -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',
|
||||
},
|
||||
])
|
||||
})
|
||||
|
|
|
@ -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'
|
||||
)
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -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}`,
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<ScheduleItem>()
|
||||
}
|
||||
}
|
||||
}
|
||||
throw e
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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) =>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { User } from "@skolplattformen/api";
|
||||
import { User } from '@skolplattformen/api'
|
||||
|
||||
export const user = ({
|
||||
socialSecurityNumber,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<QueueEntry>
|
||||
|
||||
private currentRunningQueue : QueueEntry | undefined
|
||||
private currentRunningQueue: QueueEntry | undefined
|
||||
|
||||
private changeChildFunc : (childId : string) => Promise<any>
|
||||
private changeChildFunc: (childId: string) => Promise<any>
|
||||
|
||||
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<any>) {
|
||||
constructor(changeChildFunc: (childId: string) => Promise<any>) {
|
||||
this.changeChildFunc = changeChildFunc
|
||||
this.queues = new RoundRobinArray(new Array<QueueEntry>())
|
||||
}
|
||||
|
@ -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<T>(func : () => Promise<T>, id : string) : Promise<T> {
|
||||
public async fetch<T>(func: () => Promise<T>, id: string): Promise<T> {
|
||||
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)
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ export default class RoundRobinArray<T> {
|
|||
|
||||
array: T[]
|
||||
|
||||
constructor(array : Array<T>, index?: number | undefined) {
|
||||
constructor(array: Array<T>, index?: number | undefined) {
|
||||
this.index = index || 0
|
||||
|
||||
if (array === undefined || array === null) {
|
||||
|
@ -20,11 +20,15 @@ export default class RoundRobinArray<T> {
|
|||
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
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<Response>)) : Fetcher {
|
||||
export default function queueFetcherWrapper(
|
||||
fetch: Fetcher,
|
||||
changeChildFunc: (childId: string) => Promise<Response>
|
||||
): Fetcher {
|
||||
const queue = new QueueFetcher(changeChildFunc)
|
||||
queue.verboseDebug = false
|
||||
|
||||
return async (name: string, url: string, init: RequestInit = { headers: {} }, childId? : string)
|
||||
: Promise<Response> => {
|
||||
return async (
|
||||
name: string,
|
||||
url: string,
|
||||
init: RequestInit = { headers: {} },
|
||||
childId?: string
|
||||
): Promise<Response> => {
|
||||
if (childId === undefined) {
|
||||
return fetch(name, url, init)
|
||||
}
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -1 +1 @@
|
|||
import '@testing-library/jest-native/extend-expect';
|
||||
import '@testing-library/jest-native/extend-expect'
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 (
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue