Merge remote-tracking branch 'origin/master'

pull/8/head
FlayInAHook 4 years ago
commit f921f7897a

@ -63,8 +63,8 @@ export class AppComponent {
}
logout() {
this.navService.closeNav();
this.authService.logout().subscribe().add(() => this.router.navigate(['login']));
this.sideNav.close();
}
ngAfterViewInit() {

@ -1,4 +1,4 @@
<div routerLink = "/profile" >
<div routerLink = "/profile" class="sidenav-profile">
<img class="navbar-photo" src={{profileURL}}>
<p>{{name}}</p>
<p>{{email}}</p>

@ -6,3 +6,7 @@
border-radius:50%;
margin-top:10px;
}
.sidenav-profile {
outline: none;
}

@ -0,0 +1,137 @@
import {async, TestBed} from '@angular/core/testing';
import {CellComponent} from './cell.component';
import {DatePipe} from '@angular/common';
describe('CellComponent', () => {
let fixture, cell;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [CellComponent],
providers: [DatePipe]
});
fixture = TestBed.createComponent(CellComponent);
cell = fixture.componentInstance;
});
it('should accept value true', async(() => {
cell._value = true;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._value).toBe(true);
});
}));
it('should set value true', async(() => {
cell.value = true;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._value).toBe(true);
});
}));
it('should return value false', async(() => {
cell._value = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell.value).toBe(false);
});
}));
it('should accept editable true', async(() => {
cell._editable = true;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._editable).toBe(true);
});
}));
it('should set editable false', async(() => {
cell.editable = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._editable).toBe(false);
});
}));
it('should return editable false', async(() => {
cell._editable = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell.editable).toBe(false);
});
}));
it('should accept input type String', async(() => {
cell._inputType = 'String';
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._inputType).toBe('String');
});
}));
it('should set input type String', async(() => {
cell.inputType = 'String';
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._inputType).toBe('String');
});
}));
it('should return input type String', async(() => {
cell._inputType = 'String';
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell.inputType).toBe('String');
});
}));
it('should accept required true', async(() => {
cell._required = true;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._required).toBe(true);
});
}));
it('should set required false', async(() => {
cell.required = false;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._required).toBe(false);
});
}));
it('should return required true', async(() => {
cell._required = true;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell.required).toBe(true);
});
}));
it('should return html input type text', async(() => {
cell.getHtmlInputType('String');
expect(cell.htmlInputType).toBe('text');
}));
it('should return html input type enum', async(() => {
cell.getHtmlInputType('Enum');
expect(cell.htmlInputType).toBe('enum');
}));
it('should return html input type number', async(() => {
cell.getHtmlInputType('Int');
expect(cell.htmlInputType).toBe('number');
}));
it('should return html input type boolean', async(() => {
cell.getHtmlInputType('Boolean');
expect(cell.htmlInputType).toBe('boolean');
}));
});

@ -0,0 +1,50 @@
import {async, TestBed} from "@angular/core/testing";
import {CellComponent} from "../cell/cell.component";
import {DatePipe} from "@angular/common";
import {DateRangeCellComponent} from "./date-range-cell.component";
describe('DateRangeCellComponent', () => {
let fixture, daterangecell;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [DateRangeCellComponent],
providers: [DatePipe]
});
fixture = TestBed.createComponent(DateRangeCellComponent);
daterangecell = fixture.componentInstance;
});
it('should set from date value', async(() => {
let event = {
value: '2020-11-23'
};
daterangecell.startDateChange(event);
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(daterangecell.from).toBe('2020-11-23');
});
}));
it('should set to date value', async(() => {
let event = {
value: '2020-11-23'
};
daterangecell.endDateChange(event);
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(daterangecell.to).toBe('2020-11-23');
});
}));
it('should transform 23-Nov-2020 to 2020-11.23', async(() => {
expect(daterangecell.transformDate('23-Nov-2020')).toBe('2020-11-23');
}));
it('should return 2020-11-23 as 23.11.2020 ', async(() => {
expect(daterangecell.toLocaleDate('2020-11-23')).toBe('23.11.2020');
}));
});

@ -0,0 +1,139 @@
import {async, TestBed} from '@angular/core/testing';
import {DatePipe} from '@angular/common';
import {NumberRangeCellComponent} from './number-range-cell.component';
import {FormControl, FormGroup} from '@angular/forms';
describe('NumberRangeCellComponent', () => {
let fixture, cell;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [NumberRangeCellComponent],
providers: [DatePipe]
});
fixture = TestBed.createComponent(NumberRangeCellComponent);
cell = fixture.componentInstance;
});
it('should set minimum value as 0', async(() => {
cell.min = 0;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._min).toBe(0);
});
}));
it('should return minimum value 0', async(() => {
cell._min = 0;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell.min).toBe(0);
});
}));
it('should set max value as 100', async(() => {
cell.max = 100;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._max).toBe(100);
});
}));
it('should return max value 100', async(() => {
cell._max = 100;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell.max).toBe(100);
});
}));
it('should set editable true', async(() => {
cell.editable = true;
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell._editable).toBe(true);
});
}));
it('should change min value, from event with value -5, to 5', async(() => {
const targ = {
value: -5
};
const event = {
target: targ
};
let rangeForm = new FormGroup({
minValue: new FormControl(),
maxValue: new FormControl(),
});
cell.rangeForm = rangeForm;
cell.minValueChange(event);
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell.min).toBe(5);
});
}));
it('should change max value, from event with value -100, to 100', async(() => {
const targ = {
value: -100
};
const event = {
target: targ
};
let rangeForm = new FormGroup({
minValue: new FormControl(),
maxValue: new FormControl(),
});
cell.rangeForm = rangeForm;
cell.maxValueChange(event);
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(cell.max).toBe(100);
});
}));
it('should set rangeError at check for invalid range of min 50 and max 10', async(() => {
let rangeForm = new FormGroup({
minValue: new FormControl(),
maxValue: new FormControl(),
});
cell.rangeForm = rangeForm;
cell.min = 50;
cell.max = 10;
cell.checkIfRangeIsValid();
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(rangeForm.controls['minValue'].errors.rangeError).toBe(true);
expect(rangeForm.controls['maxValue'].errors.rangeError).toBe(true);
});
}));
it('should set rangeError for parameter true', async(() => {
let rangeForm = new FormGroup({
minValue: new FormControl(),
maxValue: new FormControl(),
});
cell.rangeForm = rangeForm;
cell.setRangeError(true);
fixture.detectChanges();
fixture.whenStable().then(() => {
expect(rangeForm.controls['minValue'].errors.rangeError).toBe(true);
expect(rangeForm.controls['maxValue'].errors.rangeError).toBe(true);
});
}));
it('should return 5 from string -5', async(() => {
expect(cell.toPositiveNumber('-5')).toBe(5);
}));
it('should return null from string "" ', async(() => {
expect(cell.toPositiveNumber('')).toBe(null);
}));
});

@ -1,7 +1,9 @@
fragment ParticipantFieldsForBikePage on Participant {
id
start
end
dateRange {
from
to
}
usernamefLotte
usernameSlack
contactInformation {

@ -226,10 +226,14 @@ export class BikeComponent implements OnInit {
dataService: null,
columnInfo: [
{ dataPath: 'dateRange', translation: 'Zeitraum' },
{ dataPath: 'lendingStation.name', translation: 'Standort' },
{
dataPath: 'lendingStation.name',
translation: 'Standort',
link: (row) => '/lendingStation/' + row["lendingStation.id"],
},
],
editableReferences: false,
linkToTable: (element) => '/table/timeFrames',
linkToTable: () => '/table/timeFrames',
linkToTableParams: (bike) => {
return { filter: bike.name };
},
@ -237,7 +241,7 @@ export class BikeComponent implements OnInit {
];
headlineDataPath = 'name';
headlineIconName = 'directions_bike'
headlineIconName = 'directions_bike';
pageDataGQLType: string = 'CargoBike';
pageDataGQLUpdateInputType: string = 'CargoBikeUpdateInput';

@ -43,7 +43,9 @@ export class LendingStationComponent implements OnInit {
' ' +
contact.email +
' ' +
contact.phone
contact.phone +
' ' +
contact.note
);
},
propertyPrefixToOverwrite: 'contactInformationIntern',
@ -85,7 +87,9 @@ export class LendingStationComponent implements OnInit {
' ' +
contact.email +
' ' +
contact.phone
contact.phone +
' ' +
contact.note
);
},
propertyPrefixToOverwrite: 'contactInformationExtern',
@ -115,26 +119,6 @@ export class LendingStationComponent implements OnInit {
{ dataPath: 'contactInformationExtern.note', translation: 'Anmerkung' },
],
},
/*
{
type: 'ReferenceTable',
title: 'Equipment',
dataPath: 'equipment',
dataService: null,
columnInfo: [
{ dataPath: 'serialNo', translation: 'Seriennummer' },
{ dataPath: 'title', translation: 'Name' },
{ dataPath: 'description', translation: 'Beschreibung' },
],
nameToShowInSelection: (element) => {
return element.title + ' (' + element.serialNo + ')';
},
linkToTable: (element) => '/table/equipment',
linkToTableParams: (lendingStation) => {
return { filter: lendingStation.name };
},
propertyNameOfUpdateInput: 'equipmentIds',
},
{
type: 'ReferenceTable',
title: 'Zeitscheiben',
@ -142,14 +126,18 @@ export class LendingStationComponent implements OnInit {
dataService: null,
columnInfo: [
{ dataPath: 'dateRange', translation: 'Zeitraum' },
{ dataPath: 'lendingStation.name', translation: 'Standort' },
{
dataPath: 'cargoBike.name',
translation: 'Lastenrad',
link: (row) => '/bike/' + row['cargoBike.id'],
},
],
editableReferences: false,
linkToTable: (element) => '/table/timeFrames',
linkToTable: () => '/table/timeFrames',
linkToTableParams: (lendingStation) => {
return { filter: lendingStation.name };
},
},*/
},
];
headlineDataPath = 'name';
@ -163,9 +151,6 @@ export class LendingStationComponent implements OnInit {
private lendingStationsService: LendingStationsService,
private contactInformationService: ContactInformationService
) {
/*this.propertiesInfo.find(
(prop) => prop.dataPath === 'equipmentType'
).dataService = this.equipmentTypeService;*/
this.contactInformationService.loadTableData();
this.contactInformationService.tableData.subscribe((data) => {
this.propertiesInfo.find(

@ -1,8 +1,9 @@
<div id="login-form">
<div id="login-wrapper">
<h1>fLotte Login</h1>
<form id="login-form">
<mat-form-field (keyup.enter)="login()">
<mat-label>E-Mail-Adresse eingeben</mat-label>
<input matInput placeholder="fLotte@beispiel.de" [formControl]="email" />
<input matInput placeholder="fLotte@beispiel.de" autocomplete="email" [formControl]="email" />
<mat-error *ngIf="email.hasError('required')">
Bitte geben Sie eine E-Mail-Adresse ein.
</mat-error>
@ -15,6 +16,7 @@
<mat-label>Passwort eingeben</mat-label>
<input
matInput
autocomplete="password"
[type]="hide ? 'password' : 'text'"
[formControl]="password"
/>
@ -31,10 +33,13 @@
<mat-icon>{{ hide ? "visibility_off" : "visibility" }}</mat-icon>
</button>
</mat-form-field>
<mat-progress-bar mode="indeterminate" id="loading-bar" *ngIf="loading"></mat-progress-bar>
<button mat-stroked-button color="primary" (click)="login()">
Login
</button>
</form>
<mat-progress-bar
mode="indeterminate"
id="loading-bar"
*ngIf="loading"
></mat-progress-bar>
<button mat-stroked-button color="primary" (click)="login()">Login</button>
<mat-error class="login-error-message" *ngIf="errorOccurred">
{{ errorMessage }}
</mat-error>

@ -1,4 +1,7 @@
#login-wrapper {
#login-form {
display: contents;
}
display: flex;
flex-direction: column;
max-width: 32em;

@ -13,8 +13,6 @@ export class AuthService {
private currentUserSubject: BehaviorSubject<AuthUser>;
public currentUser: Observable<AuthUser>;
public loggedIn: BehaviorSubject<boolean>;
private readonly REQUEST_TOKEN = 'requestToken';
private readonly REFRESH_TOKEN = 'refreshToken';
private readonly CURRENT_USER = 'currentUser';
constructor(private http: HttpClient) {
@ -38,7 +36,7 @@ export class AuthService {
}
private checkIfUserIsLoggedIn(): void {
this.loggedIn.next(!!this.getRequestToken());
this.loggedIn.next(!!localStorage.getItem(this.CURRENT_USER));
}
public getRequestToken(): string {
@ -74,6 +72,7 @@ export class AuthService {
finalize(() => {
this.removeTokens();
this.checkIfUserIsLoggedIn();
})
);
}

@ -6,7 +6,7 @@ import jsonSchema from 'src/generated/graphql.schema.json';
})
export class SchemaService {
/** expects startingObject and variablePath and returns its type e.g. cargoBike, security.name -> returns the type of the name variable */
getPropertyTypeFromSchema(
/*getPropertyTypeFromSchema(
startingObjectName: string,
variable: string
): string {
@ -38,7 +38,7 @@ export class SchemaService {
variablePath.slice(1).join('.')
);
}
}
}*/
getEnumValuesFromSchema(typeName: string): string[] {
const types = jsonSchema.__schema.types;
@ -67,7 +67,7 @@ export class SchemaService {
if (!field) {
return { isPartOfType: false, type: '', isRequired: false };
}
const type = field.type.name || field.type.ofType.name;
const type = this.getTypeNameFromTypeObject(field.type);
if (variablePath.length === 1) {
const isRequired = field.type.kind === 'NON_NULL';
if (
@ -94,6 +94,14 @@ export class SchemaService {
}
}
private getTypeNameFromTypeObject(typeObject: any) {
let object =typeObject;
while (object.name == null && object.ofType != null) {
object = object.ofType;
}
return object.name;
}
filterObject(graphQLTypeName: string, object: object): any {
let filteredObject;
if (Array.isArray(object)) {

@ -75,9 +75,13 @@
"description": "see column A in info tabelle",
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "ENUM",
"name": "Group",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
@ -2374,33 +2378,21 @@
"deprecationReason": null
},
{
"name": "start",
"name": "dateRange",
"description": null,
"args": [],
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "SCALAR",
"name": "Date",
"kind": "OBJECT",
"name": "DateRange",
"ofType": null
}
},
"isDeprecated": false,
"deprecationReason": null
},
{
"name": "end",
"description": null,
"args": [],
"type": {
"kind": "SCALAR",
"name": "Date",
"ofType": null
},
"isDeprecated": false,
"deprecationReason": null
},
{
"name": "contactInformation",
"description": null,
@ -2610,22 +2602,16 @@
"fields": null,
"inputFields": [
{
"name": "start",
"name": "dateRange",
"description": "if not set, CURRENT_DATE will be used",
"type": {
"kind": "SCALAR",
"name": "Date",
"ofType": null
},
"defaultValue": null
},
{
"name": "end",
"description": null,
"type": {
"kind": "SCALAR",
"name": "Date",
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "INPUT_OBJECT",
"name": "DateRangeInput",
"ofType": null
}
},
"defaultValue": null
},
@ -2745,21 +2731,11 @@
"defaultValue": null
},
{
"name": "start",
"description": "if not set, CURRENT_DATE will be used",
"type": {
"kind": "SCALAR",
"name": "Date",
"ofType": null
},
"defaultValue": null
},
{
"name": "end",
"name": "dateRange",
"description": null,
"type": {
"kind": "SCALAR",
"name": "Date",
"kind": "INPUT_OBJECT",
"name": "DateRangeInput",
"ofType": null
},
"defaultValue": null
@ -3769,9 +3745,13 @@
"name": "dateRange",
"description": null,
"type": {
"kind": "NON_NULL",
"name": null,
"ofType": {
"kind": "INPUT_OBJECT",
"name": "DateRangeInput",
"ofType": null
}
},
"defaultValue": null
},

@ -39,7 +39,7 @@ export type CargoBike = {
__typename?: 'CargoBike';
id: Scalars['ID'];
/** see column A in info tabelle */
group?: Maybe<Group>;
group: Group;
name: Scalars['String'];
state?: Maybe<BikeState>;
modelName?: Maybe<Scalars['String']>;
@ -406,8 +406,7 @@ export enum Group {
export type Participant = {
__typename?: 'Participant';
id: Scalars['ID'];
start: Scalars['Date'];
end?: Maybe<Scalars['Date']>;
dateRange: DateRange;
contactInformation: ContactInformation;
usernamefLotte?: Maybe<Scalars['String']>;
usernameSlack?: Maybe<Scalars['String']>;
@ -432,8 +431,7 @@ export type Participant = {
export type ParticipantCreateInput = {
/** if not set, CURRENT_DATE will be used */
start?: Maybe<Scalars['Date']>;
end?: Maybe<Scalars['Date']>;
dateRange: DateRangeInput;
/** must create contactinformation first, if you want to use new */
contactInformationId: Scalars['ID'];
usernamefLotte?: Maybe<Scalars['String']>;
@ -448,9 +446,7 @@ export type ParticipantCreateInput = {
export type ParticipantUpdateInput = {
id: Scalars['ID'];
/** if not set, CURRENT_DATE will be used */
start?: Maybe<Scalars['Date']>;
end?: Maybe<Scalars['Date']>;
dateRange?: Maybe<DateRangeInput>;
/** must create contactinformation first, if you want to use new */
contactInformationId?: Maybe<Scalars['ID']>;
usernamefLotte?: Maybe<Scalars['String']>;
@ -562,7 +558,7 @@ export type Engagement = {
export type EngagementCreateInput = {
engagementTypeId: Scalars['ID'];
dateRange?: Maybe<DateRangeInput>;
dateRange: DateRangeInput;
participantId: Scalars['ID'];
cargoBikeId: Scalars['ID'];
};
@ -2014,7 +2010,7 @@ export type DeleteEquipmentTypeMutation = { __typename?: 'Mutation', deleteEquip
export type AddressFieldsFragment = { __typename?: 'Address', street: string, number: string, zip: string };
export type CargoBikeFieldsForTableFragment = { __typename?: 'CargoBike', id: string, group?: Maybe<Group>, name: string, modelName?: Maybe<string>, state?: Maybe<BikeState>, numberOfChildren?: Maybe<number>, numberOfWheels?: Maybe<number>, forCargo?: Maybe<boolean>, forChildren?: Maybe<boolean>, stickerBikeNameState?: Maybe<StickerBikeNameState>, note?: Maybe<string>, isLocked: boolean, isLockedByMe: boolean, lockedBy?: Maybe<string>, lockedUntil?: Maybe<any>, insuranceData?: Maybe<{ __typename?: 'InsuranceData', billing?: Maybe<string>, hasFixedRate?: Maybe<boolean>, name?: Maybe<string>, benefactor?: Maybe<string>, noPnP?: Maybe<string>, maintenanceResponsible?: Maybe<string>, maintenanceBenefactor?: Maybe<string>, maintenanceAgreement?: Maybe<string>, fixedRate?: Maybe<number>, projectAllowance?: Maybe<any>, notes?: Maybe<string> }>, dimensionsAndLoad?: Maybe<{ __typename?: 'DimensionsAndLoad', bikeLength?: Maybe<number>, bikeWeight?: Maybe<number>, bikeHeight?: Maybe<number>, bikeWidth?: Maybe<number>, hasCoverBox?: Maybe<boolean>, lockable?: Maybe<boolean>, maxWeightBox?: Maybe<number>, maxWeightLuggageRack?: Maybe<number>, maxWeightTotal?: Maybe<number>, boxHeightRange?: Maybe<{ __typename?: 'NumRange', max?: Maybe<number>, min?: Maybe<number> }>, boxLengthRange?: Maybe<{ __typename?: 'NumRange', min?: Maybe<number>, max?: Maybe<number> }>, boxWidthRange?: Maybe<{ __typename?: 'NumRange', min?: Maybe<number>, max?: Maybe<number> }> }>, security?: Maybe<{ __typename?: 'Security', frameNumber?: Maybe<string>, adfcCoding?: Maybe<string>, keyNumberAXAChain?: Maybe<string>, keyNumberFrameLock?: Maybe<string>, policeCoding?: Maybe<string> }>, technicalEquipment?: Maybe<{ __typename?: 'TechnicalEquipment', bicycleShift?: Maybe<string>, isEBike?: Maybe<boolean>, hasLightSystem?: Maybe<boolean>, specialFeatures?: Maybe<string> }>, taxes?: Maybe<{ __typename?: 'Taxes', costCenter?: Maybe<string>, organisationArea?: Maybe<OrganisationArea> }>, provider?: Maybe<(
export type CargoBikeFieldsForTableFragment = { __typename?: 'CargoBike', id: string, group: Group, name: string, modelName?: Maybe<string>, state?: Maybe<BikeState>, numberOfChildren?: Maybe<number>, numberOfWheels?: Maybe<number>, forCargo?: Maybe<boolean>, forChildren?: Maybe<boolean>, stickerBikeNameState?: Maybe<StickerBikeNameState>, note?: Maybe<string>, isLocked: boolean, isLockedByMe: boolean, lockedBy?: Maybe<string>, lockedUntil?: Maybe<any>, insuranceData?: Maybe<{ __typename?: 'InsuranceData', billing?: Maybe<string>, hasFixedRate?: Maybe<boolean>, name?: Maybe<string>, benefactor?: Maybe<string>, noPnP?: Maybe<string>, maintenanceResponsible?: Maybe<string>, maintenanceBenefactor?: Maybe<string>, maintenanceAgreement?: Maybe<string>, fixedRate?: Maybe<number>, projectAllowance?: Maybe<any>, notes?: Maybe<string> }>, dimensionsAndLoad?: Maybe<{ __typename?: 'DimensionsAndLoad', bikeLength?: Maybe<number>, bikeWeight?: Maybe<number>, bikeHeight?: Maybe<number>, bikeWidth?: Maybe<number>, hasCoverBox?: Maybe<boolean>, lockable?: Maybe<boolean>, maxWeightBox?: Maybe<number>, maxWeightLuggageRack?: Maybe<number>, maxWeightTotal?: Maybe<number>, boxHeightRange?: Maybe<{ __typename?: 'NumRange', max?: Maybe<number>, min?: Maybe<number> }>, boxLengthRange?: Maybe<{ __typename?: 'NumRange', min?: Maybe<number>, max?: Maybe<number> }>, boxWidthRange?: Maybe<{ __typename?: 'NumRange', min?: Maybe<number>, max?: Maybe<number> }> }>, security?: Maybe<{ __typename?: 'Security', frameNumber?: Maybe<string>, adfcCoding?: Maybe<string>, keyNumberAXAChain?: Maybe<string>, keyNumberFrameLock?: Maybe<string>, policeCoding?: Maybe<string> }>, technicalEquipment?: Maybe<{ __typename?: 'TechnicalEquipment', bicycleShift?: Maybe<string>, isEBike?: Maybe<boolean>, hasLightSystem?: Maybe<boolean>, specialFeatures?: Maybe<string> }>, taxes?: Maybe<{ __typename?: 'Taxes', costCenter?: Maybe<string>, organisationArea?: Maybe<OrganisationArea> }>, provider?: Maybe<(
{ __typename?: 'Provider' }
& ProviderFieldsGeneralFragment
)>, lendingStation?: Maybe<(
@ -2116,7 +2112,7 @@ export type OrganisationFieldsGeneralFragment = { __typename?: 'Organisation', i
& AddressFieldsFragment
)> };
export type ParticipantFieldsForBikePageFragment = { __typename?: 'Participant', id: string, start: any, end?: Maybe<any>, usernamefLotte?: Maybe<string>, usernameSlack?: Maybe<string>, isLocked: boolean, isLockedByMe: boolean, lockedBy?: Maybe<string>, lockedUntil?: Maybe<any>, contactInformation: (
export type ParticipantFieldsForBikePageFragment = { __typename?: 'Participant', id: string, usernamefLotte?: Maybe<string>, usernameSlack?: Maybe<string>, isLocked: boolean, isLockedByMe: boolean, lockedBy?: Maybe<string>, lockedUntil?: Maybe<any>, dateRange: { __typename?: 'DateRange', from: any, to?: Maybe<any> }, contactInformation: (
{ __typename?: 'ContactInformation' }
& ContactInformationFieldsGeneralFragment
) };
@ -2457,8 +2453,10 @@ export const ContactInformationFieldsGeneralFragmentDoc = gql`
export const ParticipantFieldsForBikePageFragmentDoc = gql`
fragment ParticipantFieldsForBikePage on Participant {
id
start
end
dateRange {
from
to
}
usernamefLotte
usernameSlack
contactInformation {

Loading…
Cancel
Save