@appbaseio/reactivesearch-vue
Version:
A Vue UI components library for building search experiences
158 lines (154 loc) • 5.69 kB
JavaScript
import VueTypes from 'vue-types';
// import dateFormats from './dateFormats';
VueTypes.sensibleDefaults = false;
var reactKeyType = VueTypes.oneOfType([VueTypes.string, VueTypes.arrayOf(VueTypes.string), VueTypes.object, VueTypes.arrayOf(VueTypes.object)]);
function validateLocation(value) {
if (!value || !value.lat || !value.lng) {
console.error(new Error('location must be an object with lat and lng keys defined'));
return false;
}
// eslint-disable-next-line
if (isNaN(value.lat)) {
console.error(new Error('lat value must be a number'));
return false;
}
// eslint-disable-next-line
if (isNaN(value.lat)) {
console.error(new Error('lng value must be a number'));
return false;
}
if (value.lat < -90 || value.lat > 90) {
console.error(new Error('lat value should be between -90 and 90.'));
return false;
}
if (value.lat < -180 || value.lat > 180) {
console.error(new Error('lng value should be between -180 and 180.'));
return false;
}
return true;
}
var types = {
any: VueTypes.any,
bool: VueTypes.bool,
boolRequired: {
type: Boolean,
required: true
},
components: VueTypes.arrayOf(VueTypes.string),
compoundClause: VueTypes.oneOf(['filter', 'must']),
children: VueTypes.any,
data: VueTypes.arrayOf(VueTypes.object),
dataFieldArray: VueTypes.oneOfType([VueTypes.string, VueTypes.arrayOf(VueTypes.string)]).isRequired,
dataNumberBox: VueTypes.shape({
label: VueTypes.string,
start: VueTypes.number.isRequired,
end: VueTypes.number.isRequired
}).isRequired,
date: VueTypes.oneOfType([VueTypes.string, VueTypes.arrayOf(VueTypes.string)]),
dateObject: VueTypes.object,
excludeFields: VueTypes.arrayOf(VueTypes.string),
fieldWeights: VueTypes.arrayOf(VueTypes.number),
filterLabel: VueTypes.string,
func: {
type: Function,
required: false
},
funcRequired: VueTypes.func.isRequired,
fuzziness: VueTypes.oneOf([0, 1, 2, 'AUTO']),
headers: VueTypes.object,
hits: VueTypes.arrayOf(VueTypes.object),
iconPosition: VueTypes.oneOf(['left', 'right']),
includeFields: VueTypes.arrayOf(VueTypes.string),
labelPosition: VueTypes.oneOf(['left', 'right', 'top', 'bottom']),
number: VueTypes.number,
options: VueTypes.oneOfType([VueTypes.arrayOf(VueTypes.object), VueTypes.object]),
paginationAt: VueTypes.oneOf(['top', 'bottom', 'both']),
range: VueTypes.shape({
start: VueTypes.number.isRequired,
end: VueTypes.number.isRequired
}),
rangeLabels: VueTypes.shape({
start: VueTypes.string.isRequired,
end: VueTypes.string.isRequired
}),
react: VueTypes.shape({
and: reactKeyType,
or: reactKeyType,
not: reactKeyType
}),
selectedValues: VueTypes.object,
selectedValue: VueTypes.oneOfType([VueTypes.string, VueTypes.arrayOf(VueTypes.string), VueTypes.arrayOf(VueTypes.object), VueTypes.object, Number, VueTypes.arrayOf(Number)]),
suggestions: VueTypes.arrayOf(VueTypes.object),
supportedOrientations: VueTypes.oneOf(['portrait', 'portrait-upside-down', 'landscape', 'landscape-left', 'landscape-right']),
sortBy: VueTypes.oneOf(['asc', 'desc']),
sortOptions: VueTypes.arrayOf(VueTypes.shape({
label: VueTypes.string,
dataField: VueTypes.string,
sortBy: VueTypes.string
})),
sortByWithCount: VueTypes.oneOf(['asc', 'desc', 'count']),
stats: VueTypes.arrayOf(VueTypes.object),
string: {
type: String,
required: false
},
stringArray: {
type: [String],
required: false
},
stringOrArray: VueTypes.oneOfType([VueTypes.string, VueTypes.arrayOf(VueTypes.string)]),
stringRequired: VueTypes.string.isRequired,
style: VueTypes.object,
themePreset: VueTypes.oneOf(['light', 'dark']),
// queryFormatDate: VueTypes.oneOf(VueTypes.object.keys(dateFormats)),
queryFormatSearch: VueTypes.oneOf(['and', 'or']),
queryFormatNumberBox: VueTypes.oneOf(['exact', 'lte', 'gte']),
params: VueTypes.object.isRequired,
props: VueTypes.object,
rangeLabelsAlign: VueTypes.oneOf(['left', 'right']),
title: VueTypes.oneOfType([VueTypes.string, VueTypes.nullable]),
tooltipTrigger: VueTypes.oneOf(['always', 'none', 'hover']),
location: VueTypes.custom(validateLocation),
unit: VueTypes.oneOf(['mi', 'miles', 'yd', 'yards', 'ft', 'feet', 'in', 'inch', 'km', 'kilometers', 'm', 'meters', 'cm', 'centimeters', 'mm', 'millimeters', 'NM', 'nmi', 'nauticalmiles']),
value: VueTypes.string.def(undefined),
reactivesearchAPIConfig: VueTypes.shape({
recordAnalytics: VueTypes.bool,
emptyQuery: VueTypes.bool,
suggestionAnalytics: VueTypes.bool,
enableQueryRules: VueTypes.bool,
enableSearchRelevancy: VueTypes.bool,
userId: VueTypes.string,
useCache: VueTypes.bool,
customEvents: VueTypes.object,
enableTelemetry: VueTypes.bool.def(true)
}).def({}),
mongodb: VueTypes.shape({
db: VueTypes.string,
collection: VueTypes.string
}),
endpointConfig: VueTypes.shape({
url: VueTypes.string.isRequired,
method: VueTypes.string,
headers: VueTypes.object,
body: VueTypes.object
}),
AIConfig: VueTypes.shape({
systemPrompt: VueTypes.string,
topDocsForContext: VueTypes.number,
maxTokens: VueTypes.number,
docTemplate: VueTypes.string,
queryTemplate: VueTypes.string,
temperature: VueTypes.number
}),
AIUIConfig: VueTypes.shape({
loaderMessage: VueTypes.string,
// slot #loaderMessage should also be supported
showSourceDocuments: VueTypes.bool,
renderSourceDocument: VueTypes.func,
onSourceClick: VueTypes.func,
// renderAskButton: VueTypes.func,has to be a slot
askButton: VueTypes.bool,
showFeedback: VueTypes.bool
})
};
export { types as t };