UNPKG

@ember-data/record-data

Version:

Provides the default resource cache (RecordData) implementation for ember-data

68 lines (56 loc) 1.81 kB
import type { CollectionResourceRelationship, Links, Meta, PaginationLinks, } from '@ember-data/types/q/ember-data-json-api'; import type { StableRecordIdentifier } from '@ember-data/types/q/identifier'; import type { UpgradedMeta } from '../../graph/-edge-definition'; import type { RelationshipState } from '../../graph/-state'; import { createState } from '../../graph/-state'; export default class ManyRelationship { declare definition: UpgradedMeta; declare identifier: StableRecordIdentifier; declare _state: RelationshipState | null; declare transactionRef: number; declare localMembers: Set<StableRecordIdentifier>; declare remoteMembers: Set<StableRecordIdentifier>; declare meta: Meta | null; declare links: Links | PaginationLinks | null; declare remoteState: StableRecordIdentifier[]; declare localState: StableRecordIdentifier[]; constructor(definition: UpgradedMeta, identifier: StableRecordIdentifier) { this.definition = definition; this.identifier = identifier; this._state = null; this.transactionRef = 0; this.localMembers = new Set<StableRecordIdentifier>(); this.remoteMembers = new Set<StableRecordIdentifier>(); this.meta = null; this.links = null; // persisted state this.remoteState = []; // local client state this.localState = []; } get state(): RelationshipState { let { _state } = this; if (!_state) { _state = this._state = createState(); } return _state; } getData(): CollectionResourceRelationship { let payload: any = {}; if (this.state.hasReceivedData) { payload.data = this.localState.slice(); } if (this.links) { payload.links = this.links; } if (this.meta) { payload.meta = this.meta; } return payload; } }