> npm install --save @libvue/laravel-orion-api
// BaseRepository.js
import { LaravelOrionAPI } from "@libvue/laravel-orion-api";
class BaseRepository extends LaravelOrionAPI {
constructor() {
// If you want to use a custom axios config, use super(yourAxiosConfig), else just use super()
super();
this.baseURL = `${import.meta.env.VITE_API_DOMAIN}`;
this.path = "";
}
}
export default BaseRepository;
// PostRepository.js
import BaseRepository from "./BaseRepository.js";
class PostRepository extends BaseRepository {
constructor() {
super();
this.path = "/posts";
}
}
export default PostRepository;
// app.js
import PostRepository from "PostRepository.js";
const PostRepositoryInstance = new PostRepository();
// Search some posts
PostRepositoryInstance.search({ limit: 10, sort: "-id" }).then((data) => {
console.log(data);
});
// app.js
import PostRepository from "PostRepository.js";
// Search some posts
PostRepository.make().search({ limit: 10, sort: "-id" }).then((data) => {
console.log(data);
});
// app.js
import PostRepository from "PostRepository.js"; // Should use `export default new PostRepository()`;
// Search some posts
PostRepository.search({ limit: 10, sort: "-id" }).then((data) => {
console.log(data);
});
variable | default | description |
---|---|---|
baseURL | / | Sets the baseURL for that instance |
path | '' | Sets the relative path to the baseURL |
autoAbort | true | Enables aborting ongoing requests for all methods inside the instance |
instance method | http-method | parameters | Restricted data keys |
---|---|---|---|
index | GET | data | includes, aggregates |
search | POST | data | page, limit, sort, filters, search, includes, aggregates |
store | POST | data, multipart | - |
show | GET | id, data | includes, aggregates |
update | PATCH, PUT or POST | id, data, multipart, method = 'PATCH' | - |
destroy | DELETE | id | - |
restore | POST | id | - |
batchStore | POST | data, multipart | - |
batchUpdate | PATCH or POST | data | - |
batchDestroy | DELETE | data | - |
batchRestore | POST | data | - |
indexRelation | GET | id, relation, data | includes, aggregates |
searchRelation | POST | id, relation, data | page, limit, sort, filters, search, includes, aggregates |
showRelation | GET | id, relation, relationId, data | includes, aggregates |
storeRelation | POST | id, relation, data, multipart | - |
updateRelation | PATCH or POST | id, relation, relationId, data, multipart | - |
destroyRelation | DELETE | id, relation, relationId | - |
restoreRelation | POST | id, relation, relationId | - |
batchStoreRelation | POST | id, relation, data, multipart | - |
batchUpdateRelation | PATCH or POST | id, relation, data, multipart | - |
batchDestroyRelation | DELETE | id, relation, data | - |
batchRestoreRelation | POST | id, relation, data | - |
sync | PATCH | id, relation, data | - |
toggle | PATCH | id, relation, data | - |
attach | POST | id, relation, data | - |
detach | DELETE | id, relation, data | - |
pivot | PATCH | id, relation, relationId, data | - |
associate | POST | id, relation, relatedKey | - |
dissociate | DELETE | id, relation, relationId | - |
abort | - | methodName OR custom id | - |
instance method | description |
---|---|
make | A builder function if you need to create an instance in the chain |
withoutAutoAbort | If the instance has autoAbort enabled, you can disable this effect for methods that use this in the chain |
withAutoAbort | If the instance has autoAbort disabled, you can enable this effect for methods that use this in the chain |
withAbortId | Changes the default abort id (method name), so you can use Instance.abort(abortId) more precise. |
By default autoAbort is set to true
for the entire instance.
Note: This will only with work synchronous requests.
const UserRepositoryInstance = new UserRepository();
// First Call
UserRepositoryInstance.index().catch((e) => {
console.log(e.code); // ERR_CANCELED
});
// Second call
UserRepositoryInstance.index().catch((e) => {
console.log(e.code); // ERR_CANCELED
});
// Third Call
UserRepositoryInstance.index().then((result) => {
console.log(result.status); // 200
});
Disabling autoAbort will not auto-abort anything. Ongoing requests can still be canceled with the UserRepository.abort('method')
or UserRepository.abort('id')
methods.
class UserRepository extends LaravelOrionAPI {
constructor(withDelay = false) {
super();
this.autoAbort = false; // Disable autoAbort here
}
}
const UserRepositoryInstance = new UserRepository();
// First Call
UserRepositoryInstance.index().then((result) => {
console.log(result.status) // 200
});
// Second call
UserRepositoryInstance.index().then((result) => {
console.log(result.status) // 200
});
// Third Call
UserRepositoryInstance.index().then((result) => {
console.log(result.status) // 200
});
const UserRepositoryInstance = new UserRepository();
// First Call
UserRepositoryInstance.withoutAutoAbort().index().then((result) => {
console.log(result.status); // 200
});
// Second call
UserRepositoryInstance.withoutAutoAbort().index().then((result) => {
console.log(result.status); // 200
});
// Third Call
UserRepositoryInstance.withoutAutoAbort().index().then((result) => {
console.log(result.status); // 200
});
Note: If you are using the index() for two different purposes simultaneously, you must use withAbortId() to avoid weird behaviour. See example below
// First Call
const UserRepositoryInstance = new UserRepository();
UserRepositoryInstance.withoutAutoAbort().index().then((result) => {
console.log(result.status); // 200
});
// Second call
UserRepositoryInstance.withoutAutoAbort().index().then((result) => {
console.log(result.status); // 200
});
// Third Call
UserRepositoryInstance.withAbortId('other-purpose').index().catch((e) => {
console.log(e.code); // ERR_CANCELED
});
// Fourth Call
UserRepositoryInstance.withAbortId('other-purpose').index().then((result) => {
console.log(result.status); // 200
});