blob: 44076bc2fbb77666412141a05518cd31089e8cba [file] [log] [blame]
import BaseModel from "./BaseModel";
import ExtendedUserProfileFieldChoice from "./ExtendedUserProfileFieldChoice";
import ExtendedUserProfileFieldLink from "./ExtendedUserProfileFieldLink";
import uuidv4 from "uuid/v4";
const FIELDS = [
"id",
"name",
"help_text",
"order",
{
name: "created_date",
type: "date",
},
{
name: "updated_date",
type: "date",
},
"field_type",
{
name: "links",
list: true,
type: ExtendedUserProfileFieldLink,
},
// For user_agreement type
"checkbox_label",
// For single_choice and multi_choice types
{
name: "choices",
list: true,
type: ExtendedUserProfileFieldChoice,
},
"other",
"required",
"userHasWriteAccess",
];
export default class ExtendedUserProfileField extends BaseModel {
constructor(data = {}) {
super(FIELDS, data);
this._key = data.key ? data.key : uuidv4();
}
get key() {
return this._key;
}
toJSON() {
const copy = Object.assign({}, this);
// Remove unnecessary properties
switch (this.field_type) {
case "text":
delete copy["other"];
delete copy["choices"];
delete copy["checkbox_label"];
break;
case "single_choice":
case "multi_choice":
delete copy["checkbox_label"];
break;
case "user_agreement":
delete copy["other"];
delete copy["choices"];
break;
default:
// eslint-disable-next-line no-console
console.error("Unrecognized field type", this.field_type);
break;
}
return copy;
}
get supportsChoices() {
return (
this.field_type === "single_choice" || this.field_type === "multi_choice"
);
}
}