src/resources/Message.js
/*
* BSD 3-Clause License
*
* Copyright (c) 2020, Mapcreator
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
import CrudBase from './base/CrudBase';
import MessageVariant from './MessageVariant';
import { makeCancelable } from '../utils/helpers';
import { camel as camelCase, snake as snakeCase } from 'case';
export default class Message extends CrudBase {
static get resourceName () {
return 'messages';
}
toObject (camelCaseKeys = false) {
const superObject = super.toObject(camelCaseKeys);
superObject.variants = superObject.variants.map(variant => {
if (variant instanceof MessageVariant) {
return variant.toObject(camelCaseKeys);
}
const caseFn = camelCaseKeys ? camelCase : snakeCase;
const res = {};
const fields = Object.keys(variant);
for (const field of fields) {
res[caseFn(field)] = variant[field];
}
return res;
});
return superObject;
}
_guessType (name, value) {
if (name === 'variants') {
return Array.from(value).map(data => new MessageVariant(this.api, data));
}
return super._guessType(name, value);
}
_buildCreateData () {
return this.toObject();
}
_update () {
return makeCancelable(async signal => {
const json = this.toObject();
await this.api.ky.patch(this.url, { json, signal });
// Reset changes
Object.assign(this._baseProperties, this._properties);
this._properties = {};
if ('updated_at' in this._baseProperties) {
this._baseProperties['updated_at'] = new Date();
}
return this;
});
}
}