104 lines
2.8 KiB
TypeScript
104 lines
2.8 KiB
TypeScript
import {
|
|
CHAPTER_DESCRIPTION_TYPE,
|
|
CHAPTER_TITLE_TYPE,
|
|
CONTENT_TYPE,
|
|
OBJECTIVE_GROUP_TYPE,
|
|
OBJECTIVE_TYPE,
|
|
} from '@/consts/types';
|
|
import EDIT_CONTENT_BLOCK_MUTATION from '@/graphql/gql/mutations/editContentBlock.gql';
|
|
import UPDATE_OBJECTIVE_VISIBILITY_MUTATION from '@/graphql/gql/mutations/updateObjectiveVisibility.gql';
|
|
import UPDATE_OBJECTIVE_GROUP_VISIBILITY_MUTATION from '@/graphql/gql/mutations/updateObjectiveGroupVisibility.gql';
|
|
import UPDATE_CHAPTER_VISIBILITY_MUTATION from '@/graphql/gql/mutations/updateChapterVisibility.gql';
|
|
|
|
export const createVisibilityMutation = (type: string, id: string, visibility: string) => {
|
|
let mutation, variables;
|
|
switch (type) {
|
|
case CONTENT_TYPE:
|
|
mutation = EDIT_CONTENT_BLOCK_MUTATION;
|
|
variables = {
|
|
input: {
|
|
id,
|
|
contentBlock: {
|
|
visibility,
|
|
},
|
|
},
|
|
};
|
|
break;
|
|
case OBJECTIVE_TYPE:
|
|
mutation = UPDATE_OBJECTIVE_VISIBILITY_MUTATION;
|
|
variables = {
|
|
input: {
|
|
id,
|
|
visibility,
|
|
},
|
|
};
|
|
break;
|
|
case OBJECTIVE_GROUP_TYPE:
|
|
mutation = UPDATE_OBJECTIVE_GROUP_VISIBILITY_MUTATION;
|
|
variables = {
|
|
input: {
|
|
id,
|
|
visibility,
|
|
},
|
|
};
|
|
break;
|
|
case CHAPTER_TITLE_TYPE:
|
|
case CHAPTER_DESCRIPTION_TYPE:
|
|
mutation = UPDATE_CHAPTER_VISIBILITY_MUTATION;
|
|
variables = {
|
|
input: {
|
|
id,
|
|
type,
|
|
visibility,
|
|
},
|
|
};
|
|
break;
|
|
}
|
|
|
|
return {
|
|
mutation,
|
|
variables,
|
|
};
|
|
};
|
|
|
|
const containsClass = (arr: any[] = [], schoolClass: any) => arr.map((entry) => entry.id).includes(schoolClass.id);
|
|
|
|
export const hidden: (options: {
|
|
type: string;
|
|
block: {
|
|
userCreated: boolean;
|
|
visibleFor: any[];
|
|
hiddenFor: any[];
|
|
titleHiddenFor?: any[];
|
|
descriptionHiddenFor?: any[];
|
|
hidden?: boolean;
|
|
};
|
|
schoolClass: any;
|
|
}) => boolean = ({
|
|
type,
|
|
block: { userCreated, visibleFor, hiddenFor, titleHiddenFor, descriptionHiddenFor, hidden },
|
|
schoolClass,
|
|
}) => {
|
|
if (hidden === true) {
|
|
return true;
|
|
}
|
|
switch (type) {
|
|
case CONTENT_TYPE:
|
|
case OBJECTIVE_TYPE:
|
|
// is this content block / objective group user created?
|
|
return userCreated
|
|
? // if so, is visibility not explicitly set for this school class?
|
|
!containsClass(visibleFor, schoolClass)
|
|
: // otherwise, is it explicitly hidden for this school class?
|
|
containsClass(hiddenFor, schoolClass);
|
|
case OBJECTIVE_GROUP_TYPE:
|
|
return containsClass(hiddenFor, schoolClass);
|
|
case CHAPTER_TITLE_TYPE:
|
|
return containsClass(titleHiddenFor, schoolClass);
|
|
case CHAPTER_DESCRIPTION_TYPE:
|
|
return containsClass(descriptionHiddenFor, schoolClass);
|
|
default:
|
|
return false;
|
|
}
|
|
};
|