MOBILE-4268 core: Remove storybook
parent
d41fab4b89
commit
92f65b38ad
|
@ -1,11 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
framework: '@storybook/angular',
|
|
||||||
addons: [
|
|
||||||
'@storybook/addon-controls',
|
|
||||||
'@storybook/addon-viewport',
|
|
||||||
'storybook-addon-designs',
|
|
||||||
'storybook-addon-rtl-direction',
|
|
||||||
'storybook-dark-mode',
|
|
||||||
],
|
|
||||||
stories: ['../src/**/*.stories.ts'],
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
import '!style-loader!css-loader!sass-loader!../src/theme/theme.design-system.scss';
|
|
||||||
import '!style-loader!css-loader!sass-loader!./styles.scss';
|
|
||||||
|
|
||||||
export const parameters = {
|
|
||||||
layout: 'centered',
|
|
||||||
darkMode: {
|
|
||||||
darkClass: 'dark',
|
|
||||||
classTarget: 'html',
|
|
||||||
stylePreview: true,
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,7 +0,0 @@
|
||||||
storybook-dynamic-app-root {
|
|
||||||
color: var(--ion-text-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
.core-error-info {
|
|
||||||
max-width: 300px;
|
|
||||||
}
|
|
|
@ -1,11 +0,0 @@
|
||||||
{
|
|
||||||
"extends": "../tsconfig.json",
|
|
||||||
"include": [
|
|
||||||
"../src/**/*"
|
|
||||||
],
|
|
||||||
"exclude": [
|
|
||||||
"../src/**/tests/**",
|
|
||||||
"../src/testing/**",
|
|
||||||
"../src/**/*.test.ts"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -30,7 +30,6 @@
|
||||||
"dev:ios": "ionic cordova run ios",
|
"dev:ios": "ionic cordova run ios",
|
||||||
"prod:android": "npm run prod --prefix cordova-plugin-moodleapp && NODE_ENV=production ionic cordova run android --prod",
|
"prod:android": "npm run prod --prefix cordova-plugin-moodleapp && NODE_ENV=production ionic cordova run android --prod",
|
||||||
"prod:ios": "NODE_ENV=production ionic cordova run ios --prod",
|
"prod:ios": "NODE_ENV=production ionic cordova run ios --prod",
|
||||||
"storybook": "start-storybook -p 6006",
|
|
||||||
"test": "NODE_ENV=testing gulp && jest --verbose",
|
"test": "NODE_ENV=testing gulp && jest --verbose",
|
||||||
"test:ci": "NODE_ENV=testing gulp && jest -ci --runInBand --verbose",
|
"test:ci": "NODE_ENV=testing gulp && jest -ci --runInBand --verbose",
|
||||||
"test:watch": "NODE_ENV=testing gulp watch & jest --watch",
|
"test:watch": "NODE_ENV=testing gulp watch & jest --watch",
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
[{"id":1,"courseimage":"https://picsum.photos/500/500","shortname":"Moodle and Mountaineering","summary":"This course will introduce you to the basics of Alpine Mountaineering, while at the same time highlighting some of the great features of Moodle."},{"id":2,"courseimage":"assets/storybook/geopattern.svg","shortname":"Digital Literacy","summary":"This course explores Digital Literacy and its importance for teachers and students. The course is optimised for the Moodle App. Please try it out!"},{"id":3,"shortname":"Class and Conflict in World Cinema","summary":"In this module we will analyse two very significant films - City of God and La Haine, both of which depict violent lives in poor conditions, the former in the favelas of Brazil and the latter in a Parisian banlieue. We will look at how conflict and class are portrayed, focusing particularly on the use of mise en scène."}]
|
|
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 14 KiB |
|
@ -1,32 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { CoreSiteFixture } from '@/storybook/stubs/classes/site';
|
|
||||||
|
|
||||||
export const companyLisaSite: CoreSiteFixture = {
|
|
||||||
id: 'companylisasite',
|
|
||||||
info: {
|
|
||||||
version: '2022041900',
|
|
||||||
sitename: 'Company',
|
|
||||||
username: 'lisa',
|
|
||||||
firstname: 'Lisa',
|
|
||||||
lastname: 'Díaz',
|
|
||||||
fullname: 'Lisa Díaz',
|
|
||||||
lang: 'en',
|
|
||||||
userid: 1,
|
|
||||||
siteurl: 'https://company.example.edu',
|
|
||||||
userpictureurl: 'https://i.pravatar.cc/300?user=companylisa',
|
|
||||||
functions: [],
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,32 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { CoreSiteFixture } from '@/storybook/stubs/classes/site';
|
|
||||||
|
|
||||||
export const schoolBarbaraSite: CoreSiteFixture = {
|
|
||||||
id: 'schoolbarbarasite',
|
|
||||||
info: {
|
|
||||||
version: '2022041900',
|
|
||||||
sitename: 'School',
|
|
||||||
username: 'barbara',
|
|
||||||
firstname: 'Barbara',
|
|
||||||
lastname: 'Gardner',
|
|
||||||
fullname: 'Barbara Gardner',
|
|
||||||
lang: 'en',
|
|
||||||
userid: 1,
|
|
||||||
siteurl: 'https://campus.example.edu',
|
|
||||||
userpictureurl: 'https://i.pravatar.cc/300?user=schoolbarbara',
|
|
||||||
functions: [],
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,32 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { CoreSiteFixture } from '@/storybook/stubs/classes/site';
|
|
||||||
|
|
||||||
export const schoolJefferySite: CoreSiteFixture = {
|
|
||||||
id: 'schooljefferysite',
|
|
||||||
info: {
|
|
||||||
version: '2022041900',
|
|
||||||
sitename: 'School',
|
|
||||||
username: 'jeffery',
|
|
||||||
firstname: 'Jeffery',
|
|
||||||
lastname: 'Sanders',
|
|
||||||
fullname: 'Jeffery Sanders',
|
|
||||||
lang: 'en',
|
|
||||||
userid: 2,
|
|
||||||
siteurl: 'https://campus.example.edu',
|
|
||||||
userpictureurl: 'https://i.pravatar.cc/300?user=schooljeffery',
|
|
||||||
functions: [],
|
|
||||||
},
|
|
||||||
};
|
|
|
@ -1,43 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { NgModule } from '@angular/core';
|
|
||||||
import { CoreEmptyBoxPageComponent } from './empty-box-page/empty-box-page';
|
|
||||||
import { CoreEmptyBoxWrapperComponent } from './empty-box-wrapper/empty-box-wrapper';
|
|
||||||
import { StorybookModule } from '@/storybook/storybook.module';
|
|
||||||
import { CoreSearchComponentsModule } from '@features/search/components/components.module';
|
|
||||||
import { CoreComponentsModule } from '@components/components.module';
|
|
||||||
import { CommonModule } from '@angular/common';
|
|
||||||
import { CoreCourseImageCardsPageComponent } from '@components/stories/components/course-image-cards-page/course-image-cards-page';
|
|
||||||
import { CoreCourseImageListPageComponent } from '@components/stories/components/course-image-list-page/course-image-list-page';
|
|
||||||
import { CoreSitesListWrapperComponent } from './sites-list-wrapper/sites-list-wrapper';
|
|
||||||
import { CoreDirectivesModule } from '@directives/directives.module';
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
declarations: [
|
|
||||||
CoreCourseImageCardsPageComponent,
|
|
||||||
CoreCourseImageListPageComponent,
|
|
||||||
CoreEmptyBoxPageComponent,
|
|
||||||
CoreEmptyBoxWrapperComponent,
|
|
||||||
CoreSitesListWrapperComponent,
|
|
||||||
],
|
|
||||||
imports: [
|
|
||||||
CommonModule,
|
|
||||||
StorybookModule,
|
|
||||||
CoreDirectivesModule,
|
|
||||||
CoreComponentsModule,
|
|
||||||
CoreSearchComponentsModule,
|
|
||||||
],
|
|
||||||
})
|
|
||||||
export class CoreComponentsStorybookModule {}
|
|
|
@ -1,22 +0,0 @@
|
||||||
<ion-app>
|
|
||||||
<ion-header>
|
|
||||||
<ion-toolbar>
|
|
||||||
<ion-title>
|
|
||||||
<h1>Course Cards</h1>
|
|
||||||
</ion-title>
|
|
||||||
</ion-toolbar>
|
|
||||||
</ion-header>
|
|
||||||
<ion-content>
|
|
||||||
<ion-card *ngFor="let course of courses">
|
|
||||||
<div class="course-image-wrapper">
|
|
||||||
<core-course-image [course]="course" [fill]="true" />
|
|
||||||
</div>
|
|
||||||
<ion-card-header>
|
|
||||||
<ion-card-title>{{ course.shortname }}</ion-card-title>
|
|
||||||
</ion-card-header>
|
|
||||||
<ion-card-content>
|
|
||||||
{{ course.summary }}
|
|
||||||
</ion-card-content>
|
|
||||||
</ion-card>
|
|
||||||
</ion-content>
|
|
||||||
</ion-app>
|
|
|
@ -1,16 +0,0 @@
|
||||||
:host {
|
|
||||||
|
|
||||||
ion-card {
|
|
||||||
max-width: 350px;
|
|
||||||
margin-right: auto;
|
|
||||||
margin-left: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.course-image-wrapper {
|
|
||||||
width: 100%;
|
|
||||||
height: 0;
|
|
||||||
padding-top: 40%;
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Component } from '@angular/core';
|
|
||||||
import { CoreCourseListItem } from '@features/courses/services/courses';
|
|
||||||
import courses from '@/assets/storybook/courses.json';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'core-course-image-cards-page',
|
|
||||||
templateUrl: 'course-image-cards-page.html',
|
|
||||||
styleUrls: ['./course-image-cards-page.scss'],
|
|
||||||
})
|
|
||||||
export class CoreCourseImageCardsPageComponent {
|
|
||||||
|
|
||||||
courses: Partial<CoreCourseListItem>[] = courses;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
<ion-app>
|
|
||||||
<ion-header>
|
|
||||||
<ion-toolbar>
|
|
||||||
<ion-title>
|
|
||||||
<h1>Courses List</h1>
|
|
||||||
</ion-title>
|
|
||||||
</ion-toolbar>
|
|
||||||
</ion-header>
|
|
||||||
<ion-content>
|
|
||||||
<ion-list>
|
|
||||||
<ion-item class="ion-text-wrap" *ngFor="let course of courses">
|
|
||||||
<core-course-image [course]="course" slot="start" />
|
|
||||||
<ion-label>
|
|
||||||
{{ course.shortname }}
|
|
||||||
</ion-label>
|
|
||||||
</ion-item>
|
|
||||||
</ion-list>
|
|
||||||
</ion-content>
|
|
||||||
</ion-app>
|
|
|
@ -1,27 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Component } from '@angular/core';
|
|
||||||
import { CoreCourseListItem } from '@features/courses/services/courses';
|
|
||||||
import courses from '@/assets/storybook/courses.json';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'core-course-image-list-page',
|
|
||||||
templateUrl: 'course-image-list-page.html',
|
|
||||||
})
|
|
||||||
export class CoreCourseImageListPageComponent {
|
|
||||||
|
|
||||||
courses: Partial<CoreCourseListItem>[] = courses;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
<ion-app>
|
|
||||||
<ion-header>
|
|
||||||
<ion-toolbar>
|
|
||||||
<ion-title>
|
|
||||||
<h1>Search</h1>
|
|
||||||
</ion-title>
|
|
||||||
</ion-toolbar>
|
|
||||||
</ion-header>
|
|
||||||
<ion-content>
|
|
||||||
<div class="core-flex-fill">
|
|
||||||
<core-search-box />
|
|
||||||
<core-empty-box-wrapper [icon]="icon" [content]="content" [dimmed]="dimmed" class="core-flex-fill" />
|
|
||||||
</div>
|
|
||||||
</ion-content>
|
|
||||||
</ion-app>
|
|
|
@ -1,27 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Component, Input } from '@angular/core';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'core-empty-box-page',
|
|
||||||
templateUrl: 'empty-box-page.html',
|
|
||||||
})
|
|
||||||
export class CoreEmptyBoxPageComponent {
|
|
||||||
|
|
||||||
@Input() icon!: string;
|
|
||||||
@Input() content!: string;
|
|
||||||
@Input() dimmed!: boolean;
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,3 +0,0 @@
|
||||||
<core-empty-box [icon]="icon" [dimmed]="dimmed">
|
|
||||||
<div [innerHTML]="html"></div>
|
|
||||||
</core-empty-box>
|
|
|
@ -1,38 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Component, Input, OnChanges } from '@angular/core';
|
|
||||||
import { DomSanitizer } from '@singletons';
|
|
||||||
import { SafeHtml } from '@angular/platform-browser';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'core-empty-box-wrapper',
|
|
||||||
templateUrl: 'empty-box-wrapper.html',
|
|
||||||
})
|
|
||||||
export class CoreEmptyBoxWrapperComponent implements OnChanges {
|
|
||||||
|
|
||||||
@Input() icon!: string;
|
|
||||||
@Input() content!: string;
|
|
||||||
@Input() dimmed!: boolean;
|
|
||||||
|
|
||||||
html?: SafeHtml;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
ngOnChanges(): void {
|
|
||||||
this.html = DomSanitizer.bypassSecurityTrustHtml(this.content);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
<ion-app>
|
|
||||||
<ion-content class="limited-width">
|
|
||||||
<core-sites-list *ngIf="accountsList" [accountsList]="accountsList" [sitesClickable]="sitesClickable"
|
|
||||||
[currentSiteClickable]="currentSiteClickable" (onSiteClicked)="siteClicked($event)">
|
|
||||||
|
|
||||||
<ng-template *ngIf="extraText !== 'none'" #siteLabel let-site="site">
|
|
||||||
<p *ngIf="extraText === 'text'">Extra text for user {{ site.fullname }}</p>
|
|
||||||
<ion-badge *ngIf="extraText === 'badge'" color="light">{{ site.badge }} MB</ion-badge>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
<ng-template #siteItem let-site="site">
|
|
||||||
<ion-button *ngIf="extraDetails === 'delete-button'" fill="clear" color="danger" slot="end">
|
|
||||||
<ion-icon name="fas-trash" slot="icon-only" />
|
|
||||||
</ion-button>
|
|
||||||
|
|
||||||
<ion-badge *ngIf="extraDetails === 'badge'" slot="end">
|
|
||||||
<span>{{site.badge}}</span>
|
|
||||||
</ion-badge>
|
|
||||||
</ng-template>
|
|
||||||
|
|
||||||
</core-sites-list>
|
|
||||||
</ion-content>
|
|
||||||
</ion-app>
|
|
|
@ -1,60 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';
|
|
||||||
import { CoreAccountsList, CoreLoginHelper } from '@features/login/services/login-helper';
|
|
||||||
import { CoreSiteBasicInfo } from '@services/sites';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'core-sites-list-wrapper',
|
|
||||||
templateUrl: 'sites-list-wrapper.html',
|
|
||||||
})
|
|
||||||
export class CoreSitesListWrapperComponent implements OnInit, OnChanges {
|
|
||||||
|
|
||||||
@Input() sitesClickable = false;
|
|
||||||
@Input() currentSiteClickableSelect = 'undefined';
|
|
||||||
@Input() extraText: 'text' | 'badge' | 'none' = 'none';
|
|
||||||
@Input() extraDetails: 'delete-button' | 'badge' | 'none' = 'none';
|
|
||||||
|
|
||||||
accountsList?: CoreAccountsList;
|
|
||||||
currentSiteClickable?: boolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
async ngOnInit(): Promise<void> {
|
|
||||||
this.accountsList = await CoreLoginHelper.getAccountsList();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
async ngOnChanges(changes: SimpleChanges): Promise<void> {
|
|
||||||
if (changes.currentSiteClickableSelect) {
|
|
||||||
this.currentSiteClickable = this.currentSiteClickableSelect === 'undefined' ?
|
|
||||||
undefined :
|
|
||||||
this.currentSiteClickableSelect === 'true';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Site clicked.
|
|
||||||
*
|
|
||||||
* @param site Site.
|
|
||||||
*/
|
|
||||||
siteClicked(site: CoreSiteBasicInfo): void {
|
|
||||||
alert(`clicked on ${site.id} - ${site.fullname}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,104 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Meta, moduleMetadata } from '@storybook/angular';
|
|
||||||
|
|
||||||
import { story } from '@/storybook/utils/helpers';
|
|
||||||
|
|
||||||
import { CoreCourseImageComponent } from '@components/course-image/course-image';
|
|
||||||
import { APP_INITIALIZER } from '@angular/core';
|
|
||||||
import { CoreSitesStub } from '@/storybook/stubs/services/sites';
|
|
||||||
import { CoreCourseImageListPageComponent } from '@components/stories/components/course-image-list-page/course-image-list-page';
|
|
||||||
import { CoreComponentsStorybookModule } from '@components/stories/components/components.module';
|
|
||||||
import { CoreCourseImageCardsPageComponent } from '@components/stories/components/course-image-cards-page/course-image-cards-page';
|
|
||||||
|
|
||||||
interface Args {
|
|
||||||
type: 'image' | 'geopattern' | 'color';
|
|
||||||
fill: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default <Meta> {
|
|
||||||
title: 'Core/Course Image',
|
|
||||||
component: CoreCourseImageComponent,
|
|
||||||
decorators: [
|
|
||||||
moduleMetadata({
|
|
||||||
imports: [CoreComponentsStorybookModule],
|
|
||||||
providers: [
|
|
||||||
{
|
|
||||||
provide: APP_INITIALIZER,
|
|
||||||
multi: true,
|
|
||||||
useValue: () => {
|
|
||||||
const site = CoreSitesStub.getRequiredCurrentSite();
|
|
||||||
|
|
||||||
site.stubWSResponse('tool_mobile_get_config', {
|
|
||||||
settings: [
|
|
||||||
{ name: 'core_admin_coursecolor1', value: '#F9B000' },
|
|
||||||
{ name: 'core_admin_coursecolor2', value: '#EF4B00' },
|
|
||||||
{ name: 'core_admin_coursecolor3', value: '#4338FB' },
|
|
||||||
{ name: 'core_admin_coursecolor4', value: '#E142FB' },
|
|
||||||
{ name: 'core_admin_coursecolor5', value: '#FF0064' },
|
|
||||||
{ name: 'core_admin_coursecolor6', value: '#FF0F18' },
|
|
||||||
{ name: 'core_admin_coursecolor7', value: '#039B06' },
|
|
||||||
{ name: 'core_admin_coursecolor8', value: '#039B88' },
|
|
||||||
{ name: 'core_admin_coursecolor9', value: '#EF009B' },
|
|
||||||
{ name: 'core_admin_coursecolor10', value: '#020B6E' },
|
|
||||||
],
|
|
||||||
warnings: [],
|
|
||||||
});
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
argTypes: {
|
|
||||||
type: {
|
|
||||||
control: {
|
|
||||||
type: 'select',
|
|
||||||
options: ['image', 'geopattern', 'color'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
args: {
|
|
||||||
type: 'image',
|
|
||||||
fill: false,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const Template = story<Args>(({ type, ...args }) => {
|
|
||||||
const getImageSource = () => {
|
|
||||||
switch (type) {
|
|
||||||
case 'image':
|
|
||||||
return 'https://picsum.photos/500/500';
|
|
||||||
case 'geopattern':
|
|
||||||
return 'assets/storybook/geopattern.svg';
|
|
||||||
case 'color':
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
return {
|
|
||||||
component: CoreCourseImageComponent,
|
|
||||||
props: {
|
|
||||||
...args,
|
|
||||||
course: {
|
|
||||||
id: 1,
|
|
||||||
courseimage: getImageSource(),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
export const Primary = story(Template);
|
|
||||||
export const ListPage = story(() => ({ component: CoreCourseImageListPageComponent }));
|
|
||||||
export const CardsPage = story(() => ({ component: CoreCourseImageCardsPageComponent }));
|
|
|
@ -1,79 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Meta, moduleMetadata } from '@storybook/angular';
|
|
||||||
import { marked } from 'marked';
|
|
||||||
|
|
||||||
import { story } from '@/storybook/utils/helpers';
|
|
||||||
|
|
||||||
import { CoreEmptyBoxComponent } from '@components/empty-box/empty-box';
|
|
||||||
import { CoreEmptyBoxWrapperComponent } from './components/empty-box-wrapper/empty-box-wrapper';
|
|
||||||
import { CoreEmptyBoxPageComponent } from './components/empty-box-page/empty-box-page';
|
|
||||||
import { CoreComponentsStorybookModule } from './components/components.module';
|
|
||||||
|
|
||||||
interface Args {
|
|
||||||
icon: string;
|
|
||||||
content: string;
|
|
||||||
dimmed: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default <Meta<Args>> {
|
|
||||||
title: 'Core/Empty Box',
|
|
||||||
component: CoreEmptyBoxComponent,
|
|
||||||
decorators: [
|
|
||||||
moduleMetadata({ imports: [CoreComponentsStorybookModule] }),
|
|
||||||
],
|
|
||||||
argTypes: {
|
|
||||||
icon: {
|
|
||||||
control: {
|
|
||||||
type: 'select',
|
|
||||||
options: ['fas-magnifying-glass', 'fas-user', 'fas-check'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
args: {
|
|
||||||
icon: 'fas-user',
|
|
||||||
content: 'No users',
|
|
||||||
dimmed: false,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const WrapperTemplate = story<Args>((args) => ({
|
|
||||||
component: CoreEmptyBoxWrapperComponent,
|
|
||||||
props: {
|
|
||||||
...args,
|
|
||||||
content: marked(args.content),
|
|
||||||
},
|
|
||||||
}));
|
|
||||||
|
|
||||||
const PageTemplate = story<Args>((args) => ({
|
|
||||||
component: CoreEmptyBoxPageComponent,
|
|
||||||
props: {
|
|
||||||
...args,
|
|
||||||
content: marked(args.content),
|
|
||||||
},
|
|
||||||
}));
|
|
||||||
|
|
||||||
export const Primary = story<Args>(WrapperTemplate);
|
|
||||||
|
|
||||||
export const Example = story<Args>(PageTemplate, {
|
|
||||||
icon: 'fas-magnifying-glass',
|
|
||||||
content: '**No results for "Test Search"**\n\n<small>Check for typos or try using different keywords</small>',
|
|
||||||
});
|
|
||||||
|
|
||||||
export const DimmedExample = story<Args>(PageTemplate, {
|
|
||||||
icon: 'fas-magnifying-glass',
|
|
||||||
content: 'What are you searching for?',
|
|
||||||
dimmed: true,
|
|
||||||
});
|
|
|
@ -1,50 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Meta, moduleMetadata, Story } from '@storybook/angular';
|
|
||||||
|
|
||||||
import { story } from '@/storybook/utils/helpers';
|
|
||||||
import { StorybookModule } from '@/storybook/storybook.module';
|
|
||||||
|
|
||||||
import { CoreErrorInfoComponent } from '@components/error-info/error-info';
|
|
||||||
|
|
||||||
interface Args {
|
|
||||||
errorCode: string;
|
|
||||||
errorDetails: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default <Meta<Args>> {
|
|
||||||
title: 'Core/Error Info',
|
|
||||||
component: CoreErrorInfoComponent,
|
|
||||||
decorators: [
|
|
||||||
moduleMetadata({
|
|
||||||
declarations: [CoreErrorInfoComponent],
|
|
||||||
imports: [StorybookModule],
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
args: {
|
|
||||||
errorCode: '',
|
|
||||||
errorDetails:
|
|
||||||
'AJAX endpoint not found. ' +
|
|
||||||
'This can happen if the Moodle site is too old or it blocks access to this endpoint. ' +
|
|
||||||
'The Moodle app only supports Moodle systems 3.5 onwards.',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const Template: Story<Args> = (args) => ({
|
|
||||||
component: CoreErrorInfoComponent,
|
|
||||||
props: args,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const Primary = story<Args>(Template);
|
|
|
@ -1,78 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Meta, moduleMetadata } from '@storybook/angular';
|
|
||||||
|
|
||||||
import { story } from '@/storybook/utils/helpers';
|
|
||||||
import { CoreSitesListComponent } from '@components/sites-list/sites-list';
|
|
||||||
import { CoreSitesListWrapperComponent } from './components/sites-list-wrapper/sites-list-wrapper';
|
|
||||||
import { CoreComponentsStorybookModule } from './components/components.module';
|
|
||||||
|
|
||||||
interface Args {
|
|
||||||
sitesClickable: boolean;
|
|
||||||
currentSiteClickable: 'true' | 'false' | 'undefined';
|
|
||||||
extraText: 'text' | 'badge' | 'none';
|
|
||||||
extraDetails: 'delete-button' | 'badge' | 'none';
|
|
||||||
}
|
|
||||||
|
|
||||||
export default <Meta<Args>> {
|
|
||||||
title: 'Core/Sites List',
|
|
||||||
component: CoreSitesListComponent,
|
|
||||||
decorators: [
|
|
||||||
moduleMetadata({ imports: [CoreComponentsStorybookModule] }),
|
|
||||||
],
|
|
||||||
argTypes: {
|
|
||||||
sitesClickable: {
|
|
||||||
control: {
|
|
||||||
type: 'boolean',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
currentSiteClickable: {
|
|
||||||
control: {
|
|
||||||
type: 'select',
|
|
||||||
options: ['true', 'false', 'undefined'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
extraText: {
|
|
||||||
control: {
|
|
||||||
type: 'select',
|
|
||||||
options: ['text', 'badge', 'none'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
extraDetails: {
|
|
||||||
control: {
|
|
||||||
type: 'select',
|
|
||||||
options: ['delete-button', 'badge', 'none'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
args: {
|
|
||||||
sitesClickable: false,
|
|
||||||
currentSiteClickable: 'undefined',
|
|
||||||
extraText: 'none',
|
|
||||||
extraDetails: 'none',
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const Template = story<Args>(({ sitesClickable, currentSiteClickable, extraText, extraDetails }) => ({
|
|
||||||
component: CoreSitesListWrapperComponent,
|
|
||||||
props: {
|
|
||||||
sitesClickable,
|
|
||||||
currentSiteClickableSelect: currentSiteClickable,
|
|
||||||
extraText,
|
|
||||||
extraDetails,
|
|
||||||
},
|
|
||||||
}));
|
|
||||||
|
|
||||||
export const Primary = story<Args>(Template);
|
|
|
@ -1,37 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Meta, moduleMetadata, Story } from '@storybook/angular';
|
|
||||||
|
|
||||||
import { story } from '@/storybook/utils/helpers';
|
|
||||||
import { StorybookModule } from '@/storybook/storybook.module';
|
|
||||||
|
|
||||||
import { CoreUserAvatarComponent } from '@components/user-avatar/user-avatar';
|
|
||||||
|
|
||||||
export default <Meta> {
|
|
||||||
title: 'Core/User Avatar',
|
|
||||||
component: CoreUserAvatarComponent,
|
|
||||||
decorators: [
|
|
||||||
moduleMetadata({
|
|
||||||
declarations: [CoreUserAvatarComponent],
|
|
||||||
imports: [StorybookModule],
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
};
|
|
||||||
|
|
||||||
const Template: Story = () => ({
|
|
||||||
component: CoreUserAvatarComponent,
|
|
||||||
});
|
|
||||||
|
|
||||||
export const Primary = story(Template);
|
|
|
@ -1,37 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { NgModule } from '@angular/core';
|
|
||||||
import { StorybookModule } from '@/storybook/storybook.module';
|
|
||||||
import { CoreSearchComponentsModule } from '@features/search/components/components.module';
|
|
||||||
import { CoreComponentsModule } from '@components/components.module';
|
|
||||||
import { CommonModule } from '@angular/common';
|
|
||||||
import {
|
|
||||||
CoreSearchGlobalSearchResultsPageComponent,
|
|
||||||
} from '@features/search/stories/components/global-search-results-page/global-search-results-page';
|
|
||||||
import { CoreSharedModule } from '@/core/shared.module';
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
declarations: [
|
|
||||||
CoreSearchGlobalSearchResultsPageComponent,
|
|
||||||
],
|
|
||||||
imports: [
|
|
||||||
CoreSharedModule,
|
|
||||||
CommonModule,
|
|
||||||
StorybookModule,
|
|
||||||
CoreComponentsModule,
|
|
||||||
CoreSearchComponentsModule,
|
|
||||||
],
|
|
||||||
})
|
|
||||||
export class CoreSearchComponentsStorybookModule {}
|
|
|
@ -1,18 +0,0 @@
|
||||||
<ion-app>
|
|
||||||
<ion-header>
|
|
||||||
<ion-toolbar>
|
|
||||||
<ion-title>
|
|
||||||
<h1>Search Results</h1>
|
|
||||||
</ion-title>
|
|
||||||
</ion-toolbar>
|
|
||||||
</ion-header>
|
|
||||||
<ion-content class="limited-width">
|
|
||||||
<div>
|
|
||||||
<core-search-box />
|
|
||||||
<ion-list>
|
|
||||||
<core-search-global-search-result *ngFor="let result of results" [result]="result"
|
|
||||||
(onClick)="resultClicked(result.title)" />
|
|
||||||
</ion-list>
|
|
||||||
</div>
|
|
||||||
</ion-content>
|
|
||||||
</ion-app>
|
|
|
@ -1,141 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Component } from '@angular/core';
|
|
||||||
import { CoreCourseListItem } from '@features/courses/services/courses';
|
|
||||||
import { CoreUserWithAvatar } from '@components/user-avatar/user-avatar';
|
|
||||||
import { CoreSearchGlobalSearchResult } from '@features/search/services/global-search';
|
|
||||||
import courses from '@/assets/storybook/courses.json';
|
|
||||||
|
|
||||||
@Component({
|
|
||||||
selector: 'core-search-global-search-results-page',
|
|
||||||
templateUrl: 'global-search-results-page.html',
|
|
||||||
})
|
|
||||||
export class CoreSearchGlobalSearchResultsPageComponent {
|
|
||||||
|
|
||||||
results: CoreSearchGlobalSearchResult[] = [
|
|
||||||
{
|
|
||||||
id: 1,
|
|
||||||
url: '',
|
|
||||||
title: 'Activity forum test',
|
|
||||||
content: 'this is a content test for a forum to see in the search result.',
|
|
||||||
context: {
|
|
||||||
courseName: 'Course 102',
|
|
||||||
userName: 'Stephania Krovalenko',
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
name: 'forum',
|
|
||||||
iconurl: 'assets/img/mod/forum.svg',
|
|
||||||
area: 'activity',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
url: '',
|
|
||||||
title: 'Activity assignment test',
|
|
||||||
content: 'this is a content test for a forum to see in the search result.',
|
|
||||||
context: {
|
|
||||||
courseName: 'Course 102',
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
name: 'assign',
|
|
||||||
iconurl: 'assets/img/mod/assign.svg',
|
|
||||||
area: '',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 3,
|
|
||||||
url: '',
|
|
||||||
title: 'Course 101',
|
|
||||||
course: courses[0] as CoreCourseListItem,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 4,
|
|
||||||
url: '',
|
|
||||||
title: 'John the Tester',
|
|
||||||
user: {
|
|
||||||
fullname: 'John Doe',
|
|
||||||
profileimageurl: 'https://placekitten.com/300/300',
|
|
||||||
} as CoreUserWithAvatar,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 5,
|
|
||||||
url: '',
|
|
||||||
title: 'Search result title',
|
|
||||||
content: 'this is a content test for a forum to see in the search result.',
|
|
||||||
context: {
|
|
||||||
userName: 'Stephania Krovalenko',
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
name: 'forum',
|
|
||||||
iconurl: 'assets/img/mod/forum.svg',
|
|
||||||
area: 'post',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 6,
|
|
||||||
url: '',
|
|
||||||
title: 'Side block',
|
|
||||||
context: {
|
|
||||||
courseName: 'Moodle Site',
|
|
||||||
},
|
|
||||||
component: {
|
|
||||||
name: 'block_html',
|
|
||||||
iconurl: 'https://master.mm.moodledemo.net/theme/image.php?theme=boost&component=core&image=e%2Fanchor',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 7,
|
|
||||||
url: '',
|
|
||||||
title: 'Course section',
|
|
||||||
context: {
|
|
||||||
courseName: 'Course 101',
|
|
||||||
},
|
|
||||||
component: {
|
|
||||||
name: 'core_course',
|
|
||||||
iconurl: 'https://master.mm.moodledemo.net/theme/image.php?theme=boost&component=core&image=i%2Fsection',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 8,
|
|
||||||
url: '',
|
|
||||||
title: 'This item has long text everywhere, so make sure that it looks good anyways. ' +
|
|
||||||
'Even if the screen you\'re using is also big, this should still be a problem because this text is *really* long.',
|
|
||||||
content: 'You would normally see lorem ipsum here, but we decided to just write some gibberish here to make it more ' +
|
|
||||||
'real. We all know that lorem ipsum is fabricated text, and even though it serves its purpose, it isn\'t as ' +
|
|
||||||
'engaging as some real, hand-crafted text (not sure why this should be engaging, anyways).',
|
|
||||||
context: {
|
|
||||||
courseName: 'And it\'s not just the title, either. Other things like the Course title also take more than ' +
|
|
||||||
'you would expect in a normal site (or even not so normal).',
|
|
||||||
userName: 'To top it off, it has a user name as well! What is this madness? Well, at some point you just have to ' +
|
|
||||||
'get creative. Honestly, I\'m surprised if you\'re even reading this. Kudos to you for being thorough.',
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
name: 'book',
|
|
||||||
iconurl: 'assets/img/mod/book.svg',
|
|
||||||
area: '',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Result clicked.
|
|
||||||
*
|
|
||||||
* @param title Result title.
|
|
||||||
*/
|
|
||||||
resultClicked(title: string): void {
|
|
||||||
alert(`clicked on ${title}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,136 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Meta, moduleMetadata } from '@storybook/angular';
|
|
||||||
|
|
||||||
import { story } from '@/storybook/utils/helpers';
|
|
||||||
|
|
||||||
import { CoreSearchGlobalSearchResultComponent } from '@features/search/components/global-search-result/global-search-result';
|
|
||||||
import { CoreSearchComponentsStorybookModule } from '@features/search/stories/components/components.module';
|
|
||||||
import {
|
|
||||||
CoreSearchGlobalSearchResultsPageComponent,
|
|
||||||
} from '@features/search/stories/components/global-search-results-page/global-search-results-page';
|
|
||||||
import { APP_INITIALIZER } from '@angular/core';
|
|
||||||
import { CoreCourseModuleDelegate } from '@features/course/services/module-delegate';
|
|
||||||
import { AddonModForumModuleHandler } from '@addons/mod/forum/services/handlers/module';
|
|
||||||
import { AddonModAssignModuleHandler } from '@addons/mod/assign/services/handlers/module';
|
|
||||||
import { CoreSearchGlobalSearchResult } from '@features/search/services/global-search';
|
|
||||||
import { CoreUserWithAvatar } from '@components/user-avatar/user-avatar';
|
|
||||||
import { CoreCourseListItem } from '@features/courses/services/courses';
|
|
||||||
import courses from '@/assets/storybook/courses.json';
|
|
||||||
|
|
||||||
interface Args {
|
|
||||||
title: string;
|
|
||||||
content: string;
|
|
||||||
image: 'course' | 'user' | 'none';
|
|
||||||
module: 'forum-activity' | 'forum-post' | 'assign' | 'none';
|
|
||||||
courseContext: boolean;
|
|
||||||
userContext: boolean;
|
|
||||||
showCourse: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default <Meta<Args>> {
|
|
||||||
title: 'Core/Search/Global Search Result',
|
|
||||||
component: CoreSearchGlobalSearchResultComponent,
|
|
||||||
decorators: [
|
|
||||||
moduleMetadata({
|
|
||||||
imports: [CoreSearchComponentsStorybookModule],
|
|
||||||
providers: [
|
|
||||||
{
|
|
||||||
provide: APP_INITIALIZER,
|
|
||||||
multi: true,
|
|
||||||
useValue() {
|
|
||||||
CoreCourseModuleDelegate.registerHandler(AddonModForumModuleHandler.instance);
|
|
||||||
CoreCourseModuleDelegate.registerHandler(AddonModAssignModuleHandler.instance);
|
|
||||||
CoreCourseModuleDelegate.updateHandlers();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
argTypes: {
|
|
||||||
image: {
|
|
||||||
control: {
|
|
||||||
type: 'select',
|
|
||||||
options: ['course', 'user', 'none'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
module: {
|
|
||||||
control: {
|
|
||||||
type: 'select',
|
|
||||||
options: ['forum-activity', 'forum-post', 'assign', 'none'],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
args: {
|
|
||||||
title: 'Result #1',
|
|
||||||
content: 'This item seems really interesting, maybe you should click through',
|
|
||||||
image: 'none',
|
|
||||||
module: 'none',
|
|
||||||
courseContext: false,
|
|
||||||
userContext: false,
|
|
||||||
showCourse: true,
|
|
||||||
},
|
|
||||||
parameters: {
|
|
||||||
design: {
|
|
||||||
type: 'figma',
|
|
||||||
url: 'https://www.figma.com/file/h3E7pkfgyImJPaYmTfnwuF/Global-Search?node-id=118%3A4610',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
const Template = story<Args>(({ image, courseContext, userContext, module, showCourse, ...args }) => {
|
|
||||||
const result: CoreSearchGlobalSearchResult = {
|
|
||||||
...args,
|
|
||||||
id: 1,
|
|
||||||
url: '',
|
|
||||||
};
|
|
||||||
|
|
||||||
if (courseContext || userContext) {
|
|
||||||
result.context = {
|
|
||||||
courseName: courseContext ? 'Course 101' : undefined,
|
|
||||||
userName: userContext ? 'John Doe' : undefined,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (module !== 'none') {
|
|
||||||
const name = module.startsWith('forum') ? 'forum' : module;
|
|
||||||
|
|
||||||
result.module = {
|
|
||||||
name,
|
|
||||||
iconurl: `assets/img/mod/${name}.svg`,
|
|
||||||
area: module.startsWith('forum') ? module.substring(6) : '',
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (image) {
|
|
||||||
case 'course':
|
|
||||||
result.course = courses[0] as CoreCourseListItem;
|
|
||||||
break;
|
|
||||||
case 'user':
|
|
||||||
result.user = {
|
|
||||||
fullname: 'John Doe',
|
|
||||||
profileimageurl: 'https://placekitten.com/300/300',
|
|
||||||
} as CoreUserWithAvatar;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
component: CoreSearchGlobalSearchResultComponent,
|
|
||||||
props: { result, showCourse },
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
export const Primary = story<Args>(Template);
|
|
||||||
export const ResultsPage = story<Args>(() => ({ component: CoreSearchGlobalSearchResultsPageComponent }));
|
|
|
@ -1,78 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { IonicModule } from '@ionic/angular';
|
|
||||||
import { NgModule, ApplicationInitStatus, APP_INITIALIZER } from '@angular/core';
|
|
||||||
import { Observable, of } from 'rxjs';
|
|
||||||
import { TranslateLoader, TranslateModule } from '@ngx-translate/core';
|
|
||||||
|
|
||||||
import englishTranslations from '@/assets/lang/en.json';
|
|
||||||
import { CoreApplicationInitStatus } from '@classes/application-init-status';
|
|
||||||
import { Translate } from '@singletons';
|
|
||||||
import { CoreSitesProviderStub, CoreSitesStub } from '@/storybook/stubs/services/sites';
|
|
||||||
import { CoreSitesProvider } from '@services/sites';
|
|
||||||
import { CoreDbProviderStub } from '@/storybook/stubs/services/db';
|
|
||||||
import { CoreDbProvider } from '@services/db';
|
|
||||||
import { CoreFilepoolProviderStub } from '@/storybook/stubs/services/filepool';
|
|
||||||
import { CoreFilepoolProvider } from '@services/filepool';
|
|
||||||
import { HttpClientStub } from '@/storybook/stubs/services/http';
|
|
||||||
import { HttpClient } from '@angular/common/http';
|
|
||||||
import { CorePushNotificationsProvider } from '@features/pushnotifications/services/pushnotifications';
|
|
||||||
import { CorePushNotificationsProviderStub } from './stubs/services/pushnotifications';
|
|
||||||
|
|
||||||
// For translate loader. AoT requires an exported function for factories.
|
|
||||||
export class StaticTranslateLoader extends TranslateLoader {
|
|
||||||
|
|
||||||
getTranslation(): Observable<typeof englishTranslations> {
|
|
||||||
return of(englishTranslations);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Module declaring dependencies for Storybook components.
|
|
||||||
*/
|
|
||||||
@NgModule({
|
|
||||||
imports: [
|
|
||||||
IonicModule.forRoot(),
|
|
||||||
TranslateModule.forRoot({
|
|
||||||
loader: {
|
|
||||||
provide: TranslateLoader,
|
|
||||||
useClass: StaticTranslateLoader,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
],
|
|
||||||
providers: [
|
|
||||||
{ provide: ApplicationInitStatus, useClass: CoreApplicationInitStatus },
|
|
||||||
{ provide: CoreSitesProvider, useClass: CoreSitesProviderStub },
|
|
||||||
{ provide: CoreDbProvider, useClass: CoreDbProviderStub },
|
|
||||||
{ provide: CoreFilepoolProvider, useClass: CoreFilepoolProviderStub },
|
|
||||||
{ provide: CorePushNotificationsProvider, useClass: CorePushNotificationsProviderStub },
|
|
||||||
{ provide: HttpClient, useClass: HttpClientStub },
|
|
||||||
{
|
|
||||||
provide: APP_INITIALIZER,
|
|
||||||
multi: true,
|
|
||||||
useValue: () => {
|
|
||||||
Translate.setDefaultLang('en');
|
|
||||||
Translate.use('en');
|
|
||||||
CoreSitesStub.stubCurrentSite();
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
exports: [
|
|
||||||
IonicModule,
|
|
||||||
TranslateModule,
|
|
||||||
],
|
|
||||||
})
|
|
||||||
export class StorybookModule {}
|
|
|
@ -1,59 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { CoreSiteWSPreSets, WSObservable } from '@classes/sites/authenticated-site';
|
|
||||||
import { CoreSite, CoreSiteConfigResponse } from '@classes/sites/site';
|
|
||||||
import { CoreSiteInfo } from '@classes/sites/unauthenticated-site';
|
|
||||||
import { of } from 'rxjs';
|
|
||||||
|
|
||||||
export interface CoreSiteFixture {
|
|
||||||
id: string;
|
|
||||||
info: CoreSiteInfo;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class CoreSiteStub extends CoreSite {
|
|
||||||
|
|
||||||
protected wsStubs: Record<string, unknown> = {};
|
|
||||||
|
|
||||||
constructor (fixture: CoreSiteFixture) {
|
|
||||||
super(fixture.id, fixture.info.siteurl, '', { info: fixture.info });
|
|
||||||
|
|
||||||
this.stubWSResponse<CoreSiteConfigResponse>('tool_mobile_get_config', {
|
|
||||||
settings: [],
|
|
||||||
warnings: [],
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
readObservable<T = unknown>(wsFunction: string, data: unknown, preSets?: CoreSiteWSPreSets): WSObservable<T> {
|
|
||||||
if (wsFunction in this.wsStubs) {
|
|
||||||
return of(this.wsStubs[wsFunction] as T);
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.readObservable<T>(wsFunction, data, preSets);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepare as stubbed response for a given WS.
|
|
||||||
*
|
|
||||||
* @param wsFunction WS function.
|
|
||||||
* @param response Response.
|
|
||||||
*/
|
|
||||||
stubWSResponse<T=unknown>(wsFunction: string, response: T): void {
|
|
||||||
this.wsStubs[wsFunction] = response;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { SQLiteDB } from '@classes/sqlitedb';
|
|
||||||
import { SQLiteObject } from '@awesome-cordova-plugins/sqlite/ngx';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SQlite database stub.
|
|
||||||
*/
|
|
||||||
export class SQLiteDBStub extends SQLiteDB {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
async createDatabase(): Promise<SQLiteObject> {
|
|
||||||
return new Proxy({
|
|
||||||
executeSql: () => Promise.resolve({ insertId: Math.random().toString() }),
|
|
||||||
}, {}) as unknown as SQLiteObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,35 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { SQLiteDBStub } from '@/storybook/stubs/classes/sqlitedb';
|
|
||||||
import { SQLiteDB } from '@classes/sqlitedb';
|
|
||||||
import { CoreDbProvider } from '@services/db';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Database provider stub.
|
|
||||||
*/
|
|
||||||
export class CoreDbProviderStub extends CoreDbProvider {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
getDB(name: string, forceNew?: boolean): SQLiteDB {
|
|
||||||
if (this.dbInstances[name] === undefined || forceNew) {
|
|
||||||
this.dbInstances[name] = new SQLiteDBStub(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.dbInstances[name];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { makeSingleton } from '@singletons';
|
|
||||||
import { CoreFilepoolProvider } from '@services/filepool';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filepool provider stub.
|
|
||||||
*/
|
|
||||||
export class CoreFilepoolProviderStub extends CoreFilepoolProvider {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
async getSrcByUrl(siteId: string, fileUrl: string): Promise<string> {
|
|
||||||
return fileUrl;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export const CoreFilepoolStub = makeSingleton<CoreFilepoolProviderStub>(CoreFilepoolProvider);
|
|
|
@ -1,38 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { makeSingleton } from '@singletons';
|
|
||||||
import { HttpClient, HttpHandler } from '@angular/common/http';
|
|
||||||
import { from, Observable } from 'rxjs';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Http service stub.
|
|
||||||
*/
|
|
||||||
export class HttpClientStub extends HttpClient {
|
|
||||||
|
|
||||||
constructor() {
|
|
||||||
super(null as unknown as HttpHandler);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
get(url: string): Observable<any> {
|
|
||||||
return from(fetch(url).then(response => response.text()));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export const HttpStub = makeSingleton<HttpClientStub>(HttpClient);
|
|
|
@ -1,32 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { CorePushNotificationsProvider } from '@features/pushnotifications/services/pushnotifications';
|
|
||||||
import { makeSingleton } from '@singletons';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sites provider stub.
|
|
||||||
*/
|
|
||||||
export class CorePushNotificationsProviderStub extends CorePushNotificationsProvider {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
async getSiteCounter(): Promise<number> {
|
|
||||||
return Math.round(Math.random() * 100);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export const CorePushNotificationsStub = makeSingleton<CorePushNotificationsProviderStub>(CorePushNotificationsProvider);
|
|
|
@ -1,86 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { companyLisaSite } from '@/assets/storybook/sites/companylisa';
|
|
||||||
import { schoolBarbaraSite } from '@/assets/storybook/sites/schoolbarbara';
|
|
||||||
import { schoolJefferySite } from '@/assets/storybook/sites/schooljeffery';
|
|
||||||
import { CoreSiteFixture, CoreSiteStub } from '@/storybook/stubs/classes/site';
|
|
||||||
import { CoreError } from '@classes/errors/error';
|
|
||||||
import { CoreSite } from '@classes/sites/site';
|
|
||||||
import { SiteDBEntry } from '@services/database/sites';
|
|
||||||
import { CoreSiteBasicInfo, CoreSitesProvider } from '@services/sites';
|
|
||||||
import { makeSingleton } from '@singletons';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sites provider stub.
|
|
||||||
*/
|
|
||||||
export class CoreSitesProviderStub extends CoreSitesProvider {
|
|
||||||
|
|
||||||
protected static readonly SITES_FIXTURES = [schoolBarbaraSite, schoolJefferySite, companyLisaSite];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
getRequiredCurrentSite!: () => CoreSiteStub;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
async getSites(ids?: string[]): Promise<CoreSiteBasicInfo[]> {
|
|
||||||
const sites = CoreSitesProviderStub.SITES_FIXTURES.map(site => (<SiteDBEntry> {
|
|
||||||
id: site.id,
|
|
||||||
siteUrl: site.info.siteurl,
|
|
||||||
info: JSON.stringify(site.info),
|
|
||||||
token: '',
|
|
||||||
privateToken: '',
|
|
||||||
loggedOut: 0,
|
|
||||||
}));
|
|
||||||
|
|
||||||
return this.siteDBRecordsToBasicInfo(sites, ids);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
async getSite(siteId?: string): Promise<CoreSite> {
|
|
||||||
if (!siteId) {
|
|
||||||
if (this.currentSite) {
|
|
||||||
return this.currentSite;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new CoreError('No current site found.');
|
|
||||||
}
|
|
||||||
|
|
||||||
const siteFixture = CoreSitesProviderStub.SITES_FIXTURES.find(site => site.id === siteId);
|
|
||||||
if (!siteFixture) {
|
|
||||||
throw new CoreError('SiteId not found.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return new CoreSiteStub(siteFixture);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @inheritdoc
|
|
||||||
*/
|
|
||||||
stubCurrentSite(fixture?: CoreSiteFixture): CoreSiteStub {
|
|
||||||
if (!this.currentSite) {
|
|
||||||
this.currentSite = new CoreSiteStub(fixture ?? schoolBarbaraSite);
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.getRequiredCurrentSite();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export const CoreSitesStub = makeSingleton<CoreSitesProviderStub>(CoreSitesProvider);
|
|
|
@ -1,30 +0,0 @@
|
||||||
// (C) Copyright 2015 Moodle Pty Ltd.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
//
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
|
|
||||||
import { Story } from '@storybook/angular';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Define story.
|
|
||||||
*
|
|
||||||
* @param template Story template.
|
|
||||||
* @param defaultArgs Default arguments.
|
|
||||||
* @returns Story.
|
|
||||||
*/
|
|
||||||
export function story<T>(template: Story<T>, defaultArgs: Partial<T> = {}): Story<T> {
|
|
||||||
const story = template.bind({});
|
|
||||||
|
|
||||||
story.args = defaultArgs;
|
|
||||||
|
|
||||||
return story;
|
|
||||||
}
|
|
|
@ -25,7 +25,6 @@
|
||||||
"src/**/tests/**",
|
"src/**/tests/**",
|
||||||
"src/**/stories/**",
|
"src/**/stories/**",
|
||||||
"src/testing/**",
|
"src/testing/**",
|
||||||
"src/storybook/**",
|
|
||||||
"src/**/*.test.ts",
|
"src/**/*.test.ts",
|
||||||
"src/**/*.stories.*"
|
"src/**/*.stories.*"
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in New Issue