Skip to content

Bagaar/ember-data-extensions

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Bagaaravel Ember Data Extensions

CI Code Style: Prettier Conventional Commits

Ember Data extensions to communicate with the Bagaaravel JSON API implementation.

Table of Contents

Introduction

@bagaaravel/ember-data-extensions is an addon that allows you to easily communicate with the Bagaaravel JSON API implementation.

Support

@bagaaravel/ember-data-extensions supports Ember v4.0 and up.

Installation

ember install @bagaaravel/ember-data-extensions

Usage

1. Extend the Application Serializer

// app/serializers/application.js

import {
  keyForAttribute,
  keyForRelationship,
  payloadKeyFromModelName,
  serialize,
  shouldSerializeHasMany
} from '@bagaaravel/ember-data-extensions/serializer'
import JSONAPISerializer from '@ember-data/serializer/json-api'

export default class ApplicationSerializer extends JSONAPISerializer {
  // Make sure attribute keys have the correct casing:
  keyForAttribute () {
    return keyForAttribute(...arguments)
  }

  // Make sure relationship keys have the correct casing:
  keyForRelationship () {
    return keyForRelationship(...arguments)
  }

  // Make sure model types have the correct casing:
  payloadKeyFromModelName () {
    return payloadKeyFromModelName(...arguments)
  }

  // Make sure relationships are correctly serialized:
  serialize () {
    const serialized = super.serialize(...arguments)

    return serialize(serialized, ...arguments)
  }

  // Check when 'hasMany' relationships should be serialized:
  shouldSerializeHasMany () {
    const superCheck = super.shouldSerializeHasMany(...arguments)

    return shouldSerializeHasMany(superCheck, ...arguments)
  }
}

2. Extend the Application Adapter

// app/adapters/application.js

import { urlForUpdateRecord } from '@bagaaravel/ember-data-extensions/adapter'
import JSONAPIAdapter from '@ember-data/adapter/json-api'

export default class ApplicationAdapter extends JSONAPIAdapter {
  // Make sure the correct URL is used when only saving a relationship:
  urlForUpdateRecord () {
    const baseUrl = super.urlForUpdateRecord(...arguments)

    return urlForUpdateRecord(baseUrl, ...arguments)
  }
}

3. Updating Relationships

import {
  saveRelationship,
  saveRelationships
} from '@bagaaravel/ember-data-extensions/model'

const user = await this.store.findRecord('user', '1')

// Update the user's projects:
saveRelationship(user, 'projects')

// Update the user's company:
saveRelationship(user, 'company')

// Update the user's projects and company:
saveRelationships(user, ['projects', 'company'])

Contributing

See the Contributing guide for details.

License

This project is licensed under the MIT License.

Maintenance

@bagaaravel/ember-data-extensions is built and maintained by Bagaar.

About

Ember Data extensions to communicate with the Bagaaravel JSON API implementation.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages