amocrm-client
Version:
JS Library for AmoCRM
25 lines (21 loc) • 1.34 kB
text/typescript
import { ICriteria, IEntityWithResponsibleUser, IResourceFactory } from "../../../interfaces/api";
import { TConstructor } from "../../../types";
import { IRequestOptions } from "../../../interfaces/common";
import { IUser } from "../User";
import { UserFactory } from "../../factories/UserFactory";
import { UserCriteria } from "../../../interfaces/user";
export interface IHasResponsibleUserEntity<T extends IResourceFactory<IEntityWithResponsibleUser<T>>> extends IEntityWithResponsibleUser<T> {
responsibleUser(criteria?: Pick<UserCriteria, "with">, options?: IRequestOptions): Promise<IUser | false>;
}
export function hasResoinsibleUser<T extends IResourceFactory<IEntityWithResponsibleUser<T>>>(Base: TConstructor<IHasResponsibleUserEntity<T>>): TConstructor<IHasResponsibleUserEntity<T>> {
return class HasContacts extends Base {
async responsibleUser(criteria?: ICriteria<any, any>, options?: IRequestOptions) {
const responsibleUserId = this.responsible_user_id;
if (!responsibleUserId) return false;
const factory: T = this.getFactory();
const userFactory = new UserFactory(factory.getRequest());
const entity = await userFactory.getById(responsibleUserId, criteria, options);
return entity;
}
};
}