mirror of
https://github.com/InvoiceShelf/InvoiceShelf.git
synced 2026-04-15 09:14:08 +00:00
Mail DEFAULT_DRIVER changes from smtp to sendmail; DRIVER_ORDER is reshuffled so sendmail is the head of the list on fresh installs. This matches what most self-hosted installs already have working out of the box — SMTP requires provider credentials the typical user doesn't have set up yet. The mail config description is rewritten to drop the 'Laravel' framework reference and to explicitly tell unsure users to leave it on sendmail.
SiteApi::get() now catches GuzzleException (the broader interface) and returns null on network failure instead of bubbling the exception object — callers were treating a non-array return as 'marketplace unavailable' anyway, so null is the correct shape.
main.ts exposes the Vue runtime on window.__invoiceshelf_vue so module JS (compiled against the host's Vue install) can call createApp / defineComponent without re-bundling Vue. invoiceshelf.css adds Tailwind source globs for Modules/**/*.{js,ts,vue,blade.php} so module-contributed classes are picked up by the host CSS pipeline.
Installation wizard PreferencesView was already in the tree waiting for the API field rename (date_formats, time_zones, fiscal_years, languages) that landed in setting.service.ts; this commit catches both sides up together.
110 lines
2.9 KiB
TypeScript
110 lines
2.9 KiB
TypeScript
import { client } from '../client'
|
|
import { API } from '../endpoints'
|
|
import type { Country } from '@/scripts/types/domain/customer'
|
|
import type { Currency } from '@/scripts/types/domain/currency'
|
|
|
|
export interface DateFormat {
|
|
display_date: string
|
|
carbon_format_value: string
|
|
moment_format_value: string
|
|
}
|
|
|
|
export interface TimeFormat {
|
|
display_time: string
|
|
carbon_format_value: string
|
|
moment_format_value: string
|
|
}
|
|
|
|
export interface ConfigResponse {
|
|
[key: string]: unknown
|
|
}
|
|
|
|
export interface GlobalSettingsPayload {
|
|
settings: Record<string, string | number | boolean | null>
|
|
}
|
|
|
|
export interface NumberPlaceholdersParams {
|
|
key: string
|
|
}
|
|
|
|
export interface NumberPlaceholder {
|
|
name: string
|
|
value: string
|
|
}
|
|
|
|
export const settingService = {
|
|
// Global Settings (admin-level)
|
|
async getGlobalSettings(): Promise<Record<string, string>> {
|
|
const { data } = await client.get(API.SETTINGS)
|
|
return data
|
|
},
|
|
|
|
async updateGlobalSettings(payload: GlobalSettingsPayload): Promise<{ success: boolean }> {
|
|
const { data } = await client.post(API.SETTINGS, payload)
|
|
return data
|
|
},
|
|
|
|
// Config
|
|
async getConfig(params?: Record<string, string>): Promise<ConfigResponse> {
|
|
const { data } = await client.get(API.CONFIG, { params })
|
|
return data
|
|
},
|
|
|
|
// Reference Data
|
|
async getCountries(): Promise<{ data: Country[] }> {
|
|
const { data } = await client.get(API.COUNTRIES)
|
|
return data
|
|
},
|
|
|
|
async getCurrencies(): Promise<{ data: Currency[] }> {
|
|
const { data } = await client.get(API.CURRENCIES)
|
|
return data
|
|
},
|
|
|
|
async getTimezones(): Promise<{ time_zones: Array<{ key: string; value: string }> }> {
|
|
const { data } = await client.get(API.TIMEZONES)
|
|
return data
|
|
},
|
|
|
|
async getDateFormats(): Promise<{ date_formats: DateFormat[] }> {
|
|
const { data } = await client.get(API.DATE_FORMATS)
|
|
return data
|
|
},
|
|
|
|
async getTimeFormats(): Promise<{ time_formats: TimeFormat[] }> {
|
|
const { data } = await client.get(API.TIME_FORMATS)
|
|
return data
|
|
},
|
|
|
|
// Serial Numbers
|
|
async getNextNumber(params: { key: string }): Promise<{ nextNumber: string }> {
|
|
const { data } = await client.get(API.NEXT_NUMBER, { params })
|
|
return data
|
|
},
|
|
|
|
async getNumberPlaceholders(params: NumberPlaceholdersParams): Promise<{ placeholders: NumberPlaceholder[] }> {
|
|
const { data } = await client.get(API.NUMBER_PLACEHOLDERS, { params })
|
|
return data
|
|
},
|
|
|
|
// Search
|
|
async search(params: { search: string }): Promise<{
|
|
users: { data: unknown[] }
|
|
customers: { data: unknown[] }
|
|
}> {
|
|
const { data } = await client.get(API.SEARCH, { params })
|
|
return data
|
|
},
|
|
|
|
async searchUsers(params: { search: string }): Promise<{ data: unknown[] }> {
|
|
const { data } = await client.get(API.SEARCH_USERS, { params })
|
|
return data
|
|
},
|
|
|
|
// App Version
|
|
async getAppVersion(): Promise<{ version: string; channel: string }> {
|
|
const { data } = await client.get(API.APP_VERSION)
|
|
return data
|
|
},
|
|
}
|