scriptable-testlab
Version:
A lightweight, efficient tool designed to manage and update scripts for Scriptable.
405 lines (339 loc) • 9.17 kB
text/typescript
import {AbsContact} from 'scriptable-abstract';
/**
* Interface for contact's email addresses
*/
export interface ContactEmailAddress {
identifier?: string;
label?: string;
localizedLabel?: string;
value: string;
}
/**
* Interface for contact's phone numbers
*/
export interface ContactPhoneNumber {
identifier?: string;
label?: string;
localizedLabel?: string;
value: string;
}
/**
* Interface for contact's postal addresses
*/
export interface ContactPostalAddress {
identifier?: string;
label: string;
localizedLabel: string;
street: string;
city: string;
state: string;
postalCode: string;
country: string;
}
/**
* Interface for contact's social profiles
*/
export interface ContactSocialProfile {
identifier?: string;
label: string;
localizedLabel: string;
service: string;
url: string;
userIdentifier: string;
username: string;
}
/**
* State interface for Contact mock
*/
export interface ContactState {
identifier: string;
namePrefix: string;
givenName: string;
middleName: string;
familyName: string;
nickname: string;
birthday: Date | null;
image: any | null;
emailAddresses: ContactEmailAddress[];
phoneNumbers: ContactPhoneNumber[];
postalAddresses: ContactPostalAddress[];
socialProfiles: ContactSocialProfile[];
note: string;
urlAddresses: Array<{[key: string]: string}>;
dates: Array<{[key: string]: any}>;
organizationName: string;
departmentName: string;
jobTitle: string;
isNamePrefixAvailable: boolean;
isGiveNameAvailable: boolean;
isGivenNameAvailable: boolean;
isMiddleNameAvailable: boolean;
isFamilyNameAvailable: boolean;
isNicknameAvailable: boolean;
isBirthdayAvailable: boolean;
isEmailAddressesAvailable: boolean;
isPhoneNumbersAvailable: boolean;
isPostalAddressesAvailable: boolean;
isSocialProfilesAvailable: boolean;
isImageAvailable: boolean;
isNoteAvailable: boolean;
isURLAddressesAvailable: boolean;
isOrganizationNameAvailable: boolean;
isDepartmentNameAvailable: boolean;
isJobTitleAvailable: boolean;
isDatesAvailable: boolean;
}
/**
* Mock implementation of Scriptable's Contact.
* Represents a contact in the user's address book.
*/
export class MockContact extends AbsContact<ContactState> {
constructor() {
super({
identifier: '',
namePrefix: '',
givenName: '',
middleName: '',
familyName: '',
nickname: '',
birthday: null,
image: null,
emailAddresses: [],
phoneNumbers: [],
postalAddresses: [],
socialProfiles: [],
note: '',
urlAddresses: [],
dates: [],
organizationName: '',
departmentName: '',
jobTitle: '',
isNamePrefixAvailable: true,
isGiveNameAvailable: true,
isGivenNameAvailable: true,
isMiddleNameAvailable: true,
isFamilyNameAvailable: true,
isNicknameAvailable: true,
isBirthdayAvailable: true,
isEmailAddressesAvailable: true,
isPhoneNumbersAvailable: true,
isPostalAddressesAvailable: true,
isSocialProfilesAvailable: true,
isImageAvailable: true,
isNoteAvailable: true,
isURLAddressesAvailable: true,
isOrganizationNameAvailable: true,
isDepartmentNameAvailable: true,
isJobTitleAvailable: true,
isDatesAvailable: true,
});
}
/**
* _Creates a new contact._
* @see https://docs.scriptable.app/contact/#new-contact
*/
static create(): MockContact {
return new MockContact();
}
/**
* _All contacts in the address book._
* @see https://docs.scriptable.app/contact/#all
*/
static async all(): Promise<MockContact[]> {
return Promise.resolve([]);
}
/**
* _Contacts matching the specified name._
* @param name - Name to search for.
* @see https://docs.scriptable.app/contact/#contactsnamed
*/
static async contactsNamed(_name: string): Promise<MockContact[]> {
return Promise.resolve([]);
}
/**
* _Picks a contact._
* @see https://docs.scriptable.app/contact/#pickcontact
*/
static async pickContact(): Promise<MockContact | null> {
return Promise.resolve(null);
}
/**
* _Picks multiple contacts._
* @see https://docs.scriptable.app/contact/#pickcontacts
*/
static async pickContacts(): Promise<MockContact[]> {
return Promise.resolve([]);
}
/**
* _Saves the contact._
* @see https://docs.scriptable.app/contact/#-save
*/
async save(): Promise<void> {
return Promise.resolve();
}
/**
* _Removes the contact._
* @see https://docs.scriptable.app/contact/#-remove
*/
async remove(): Promise<void> {
return Promise.resolve();
}
// Property getters and setters
get identifier(): string {
return this.state.identifier;
}
get namePrefix(): string {
return this.state.namePrefix;
}
set namePrefix(value: string) {
this.setState({namePrefix: value});
}
get givenName(): string {
return this.state.givenName;
}
set givenName(value: string) {
this.setState({givenName: value});
}
get middleName(): string {
return this.state.middleName;
}
set middleName(value: string) {
this.setState({middleName: value});
}
get familyName(): string {
return this.state.familyName;
}
set familyName(value: string) {
this.setState({familyName: value});
}
get nickname(): string {
return this.state.nickname;
}
set nickname(value: string) {
this.setState({nickname: value});
}
get birthday(): Date | null {
return this.state.birthday;
}
set birthday(value: Date | null) {
this.setState({birthday: value});
}
get image(): any | null {
return this.state.image;
}
set image(value: any | null) {
this.setState({image: value});
}
get emailAddresses(): ContactEmailAddress[] {
return [...this.state.emailAddresses];
}
set emailAddresses(value: ContactEmailAddress[]) {
this.setState({emailAddresses: [...value]});
}
get phoneNumbers(): ContactPhoneNumber[] {
return [...this.state.phoneNumbers];
}
set phoneNumbers(value: ContactPhoneNumber[]) {
this.setState({phoneNumbers: [...value]});
}
get postalAddresses(): ContactPostalAddress[] {
return [...this.state.postalAddresses];
}
set postalAddresses(value: ContactPostalAddress[]) {
this.setState({postalAddresses: [...value]});
}
get socialProfiles(): ContactSocialProfile[] {
return [...this.state.socialProfiles];
}
set socialProfiles(value: ContactSocialProfile[]) {
this.setState({socialProfiles: [...value]});
}
get note(): string {
return this.state.note;
}
set note(value: string) {
this.setState({note: value});
}
get urlAddresses(): Array<{[key: string]: string}> {
return [...this.state.urlAddresses];
}
set urlAddresses(value: Array<{[key: string]: string}>) {
this.setState({urlAddresses: [...value]});
}
get dates(): Array<{[key: string]: any}> {
return [...this.state.dates];
}
set dates(value: Array<{[key: string]: any}>) {
this.setState({dates: [...value]});
}
get organizationName(): string {
return this.state.organizationName;
}
set organizationName(value: string) {
this.setState({organizationName: value});
}
get departmentName(): string {
return this.state.departmentName;
}
set departmentName(value: string) {
this.setState({departmentName: value});
}
get jobTitle(): string {
return this.state.jobTitle;
}
set jobTitle(value: string) {
this.setState({jobTitle: value});
}
// Availability getters
get isNamePrefixAvailable(): boolean {
return this.state.isNamePrefixAvailable;
}
get isGivenNameAvailable(): boolean {
return this.state.isGivenNameAvailable;
}
get isMiddleNameAvailable(): boolean {
return this.state.isMiddleNameAvailable;
}
get isFamilyNameAvailable(): boolean {
return this.state.isFamilyNameAvailable;
}
get isNicknameAvailable(): boolean {
return this.state.isNicknameAvailable;
}
get isBirthdayAvailable(): boolean {
return this.state.isBirthdayAvailable;
}
get isEmailAddressesAvailable(): boolean {
return this.state.isEmailAddressesAvailable;
}
get isPhoneNumbersAvailable(): boolean {
return this.state.isPhoneNumbersAvailable;
}
get isPostalAddressesAvailable(): boolean {
return this.state.isPostalAddressesAvailable;
}
get isSocialProfilesAvailable(): boolean {
return this.state.isSocialProfilesAvailable;
}
get isImageAvailable(): boolean {
return this.state.isImageAvailable;
}
get isNoteAvailable(): boolean {
return this.state.isNoteAvailable;
}
get isURLAddressesAvailable(): boolean {
return this.state.isURLAddressesAvailable;
}
get isOrganizationNameAvailable(): boolean {
return this.state.isOrganizationNameAvailable;
}
get isDepartmentNameAvailable(): boolean {
return this.state.isDepartmentNameAvailable;
}
get isJobTitleAvailable(): boolean {
return this.state.isJobTitleAvailable;
}
get isDatesAvailable(): boolean {
return this.state.isDatesAvailable;
}
}