import { Model } from 'pinia-orm' /** * Base class for resources that can be fetched from the API */ class ApiResource extends Model { // eslint-disable-next-line no-use-before-define protected static _iriEncodedFields: Record public static addIriEncodedField(name: string, target: ApiResource) { if (!this._iriEncodedFields) { this._iriEncodedFields = {} } this._iriEncodedFields[name] = target } public static getIriEncodedFields() { return this._iriEncodedFields } /** * Fix the 'Cannot stringify arbitrary non-POJOs' warning, meaning server can not parse the store * * @see https://github.com/vuex-orm/vuex-orm/issues/255#issuecomment-876378684 */ toJSON() { return { ...this } } /** * Is it a newly created entity? * * If it is, it means this entity does not exist in the data source and that it has a temporary id */ public isNew(): boolean { return ( !this.id || (typeof this.id === 'string' && this.id.slice(0, 3) === 'tmp') ) } } export default ApiResource