File

projects/ngrx-data-lib/src/lib/state/entity-states-collection-adapter.ts

Index

Methods

Methods

addEntityState
addEntityState(name: string, state: EntityStatesCollection)

add an entity state to the EntityStatesCollection.

Parameters :
Name Type Optional Description
name string No

the unique name of the entity state to add.

state EntityStatesCollection No

the EntityStatesCollection.

deleteAllEntityStates
deleteAllEntityStates(state: EntityStatesCollection)

delete all the entity states for the EntityStatesCollection.

Parameters :
Name Type Optional Description
state EntityStatesCollection No

the EntityStatesCollection.

deleteEntityState
deleteEntityState(name: string, state: EntityStatesCollection)

delete entity state from the EntityStatesCollection.

Parameters :
Name Type Optional Description
name string No

the unique name of the entity to delete.

state EntityStatesCollection No

the EntityStatesCollection.

entityStateAddAll
entityStateAddAll(entities: any[], uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
entities any[] No
uniqueName string No
state EntityStatesCollection No
entityStateAddMany
entityStateAddMany(entities: any[], uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
entities any[] No
uniqueName string No
state EntityStatesCollection No
entityStateAddOne
entityStateAddOne(entity: any, uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
entity any No
uniqueName string No
state EntityStatesCollection No
entityStateRemoveAll
entityStateRemoveAll(uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
uniqueName string No
state EntityStatesCollection No
entityStateRemoveMany
entityStateRemoveMany(ids: string[], uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
ids string[] No
uniqueName string No
state EntityStatesCollection No
entityStateRemoveOne
entityStateRemoveOne(id: string, uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
id string No
uniqueName string No
state EntityStatesCollection No
entityStateUpdateMany
entityStateUpdateMany(entities: any[], uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
entities any[] No
uniqueName string No
state EntityStatesCollection No
entityStateUpdateOne
entityStateUpdateOne(entity: any, uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
entity any No
uniqueName string No
state EntityStatesCollection No
entityStateUpsertMany
entityStateUpsertMany(entities: any[], uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
entities any[] No
uniqueName string No
state EntityStatesCollection No
entityStateUpsertOne
entityStateUpsertOne(entity: any, uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
entity any No
uniqueName string No
state EntityStatesCollection No
getInitialState
getInitialState()

return the initial state of the collection of entities

Private processEntityState
processEntityState(func: (entityState: ExtendedEntityState) => void, uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
func function No
uniqueName string No
state EntityStatesCollection No
selectEntityId
selectEntityId(id: number | string, uniqueName: string, state: EntityStatesCollection)
Parameters :
Name Type Optional
id number | string No
uniqueName string No
state EntityStatesCollection No
import { createEntityAdapter, EntityState, Update } from '@ngrx/entity';

/**
 * Database structure.
 */
export interface EntityStatesCollection
{
    /**
     * The entity states by unique name
     */
   [name: string] : ExtendedEntityState;
}

/**
 * entity state structure.
 */
export interface ExtendedEntityState extends EntityState<any>
{
    /**
     * the errors related with this entity state.
     */
    errors: string[];
    /**
     * the number of external requests running.
     */
    loadingTasks: number;
    /**
     * id of the selected entity of this entity state
     */
    selectedId: string | number;
}

/**
 * the adapter to manage the entity changes.
 */
const entityAdapter = createEntityAdapter<any>();
export const {
    selectAll,
    selectEntities,
    selectIds,
    selectTotal  
  } = entityAdapter.getSelectors();
    

export class EntityStateCollectionAdapter
{   
    /**
     * return the initial state of the collection of entities
     */ 
    getInitialState() : EntityStatesCollection
    {
        return {};                
    }

    /**
     * add an entity state to the EntityStatesCollection.
     * @param name the unique name of the entity state to add.
     * @param state the EntityStatesCollection.
     */
    addEntityState(name: string, state: EntityStatesCollection) : EntityStatesCollection
    {
        //if the entity state already exist no changes are needed
        if(state[name])
          return state;

        //create a shadow copy
        let copy = { ...state };
       
        //add the entity state with the help of the entity adapter
        copy[name] = entityAdapter.getInitialState({
            errors: [],
            loadingTasks: 0,
            selectedId: null
        });

       return copy;
    }

    /**
     * delete entity state from the EntityStatesCollection.
     * @param name the unique name of the entity to delete.
     * @param state the EntityStatesCollection.
     */
    deleteEntityState(name: string, state: EntityStatesCollection) : EntityStatesCollection
    {
        //if the entityState does not exist no change is needed.
        if(!state[name])
          return state;

        //create a shadow copy
        let copy = { ...state };  
        
        //set the entity state to undefine
        copy[name] = undefined;

        return copy;
    }

    /**
     * delete all the entity states for the EntityStatesCollection.
     * @param state the EntityStatesCollection.
     */
    deleteAllEntityStates(state: EntityStatesCollection) : EntityStatesCollection
    {
        return {};
    }


    //actions for specific entity state----------------------------------------------------------------------------------------------------------

    entityStateAddOne(entity: any, uniqueName: string, state: EntityStatesCollection) : EntityStatesCollection
    {
       return this.processEntityState(
           (es)=>{

           return entityAdapter.addOne(entity, es);
             
       }
       , uniqueName, state);
    }

    entityStateAddMany(entities: any[], uniqueName: string, state: EntityStatesCollection) : EntityStatesCollection
    {
        return this.processEntityState(
            (es)=>{

            return entityAdapter.addMany(entities, es); 
              
        }
        , uniqueName, state);
    }


    entityStateAddAll(entities: any[], uniqueName: string, state: EntityStatesCollection) : EntityStatesCollection
    {
        return this.processEntityState(
            (es)=>{
 
                return entityAdapter.addAll(entities, es); 
              
        }
        , uniqueName, state);
    }


    entityStateRemoveOne(id: string, uniqueName: string, state: EntityStatesCollection) : EntityStatesCollection
    {
        return this.processEntityState(
            (es)=>{
 
                return entityAdapter.removeOne(id, es); 
              
        }
        , uniqueName, state);
    }   


    entityStateRemoveMany(ids: string[], uniqueName: string, state: EntityStatesCollection) : EntityStatesCollection
    {
        return this.processEntityState(
            (es)=>{
 
                return entityAdapter.removeMany(ids, es); 
              
        }
        , uniqueName, state);
    }


    entityStateRemoveAll(uniqueName: string, state: EntityStatesCollection) : EntityStatesCollection
    {
        return this.processEntityState(
            (es)=>{
 
                return entityAdapter.removeAll(es); 
              
        }
        , uniqueName, state);
    }


    entityStateUpdateOne(entity: any, uniqueName: string, state: EntityStatesCollection) : EntityStatesCollection
    {
        return this.processEntityState(
            (es)=>{
 
                return entityAdapter.updateOne( { id: entity.id, changes: entity } , es); 
              
        }
        , uniqueName, state);
    }


    entityStateUpdateMany(entities: any[], uniqueName: string, state: EntityStatesCollection) : EntityStatesCollection
    {
        return this.processEntityState(
            (es)=>{
 
                return entityAdapter.updateMany(entities.map(e=>{return{id: e.id, changes: e}}), es); 
              
        }
        , uniqueName, state);
    }


    entityStateUpsertOne(entity: any, uniqueName: string, state: EntityStatesCollection) : EntityStatesCollection
    {
        return this.processEntityState(
            (es)=>{

                return entityAdapter.upsertOne(entity, es);  
              
        }
        , uniqueName, state);
    }


    entityStateUpsertMany(entities: any[], uniqueName: string, state: EntityStatesCollection)
    {
        return this.processEntityState(
            (es)=>{

                return entityAdapter.upsertMany(entities, es);   
              
        }
        , uniqueName, state);
    }

    selectEntityId(id: number | string, uniqueName: string, state: EntityStatesCollection)
    {
        return this.processEntityState(
            (es)=>{

                return { ...es, selectedId: id };  
              
        }
        , uniqueName, state);
    }

    private processEntityState(func: (entityState: ExtendedEntityState)=>ExtendedEntityState, uniqueName: string, state: EntityStatesCollection)
    {
        let entityState = state[uniqueName];
        if(!entityAdapter)
          return state;
 
        entityState = func(entityState);
          
        let copy = {...state};
        copy[uniqueName] = entityState;
        return copy;
    }

    

}

result-matching ""

    No results matching ""