feat(fe2): re-adds syntatic sugar for new properties coming out of revit & sorts selection props alphabetically

This commit is contained in:
Dimitrie Stefanescu
2024-10-15 10:36:04 +01:00
parent acf38e7c81
commit 3ce8dff6da
6 changed files with 38 additions and 28 deletions
@@ -115,6 +115,7 @@ const {
} = useFilterUtilities()
const revitPropertyRegex = /^parameters\./
const revitPropertyRegexDui3000 = /^properties\./ // note this is partially valid for civil3d, or dim should test against it
const showAllFilters = ref(false)
@@ -123,7 +124,7 @@ const props = defineProps<{
}>()
const isRevitProperty = (key: string): boolean => {
return revitPropertyRegex.test(key)
return revitPropertyRegex.test(key) || revitPropertyRegexDui3000.test(key)
}
const relevantFilters = computed(() => {
@@ -22,7 +22,7 @@
}`"
/>
<div :class="`truncate text-body-2xs font-medium ${headerClasses}`">
{{ title || headerAndSubheader.header }}
{{ isNameValuePair }} // {{ title || headerAndSubheader.header }}
<span
v-if="(props.root || props.modifiedSibling) && isModifiedQuery.modified"
>
@@ -31,7 +31,8 @@
</div>
</button>
</div>
<div v-if="unfold" class="ml-1 space-y-1 px-2 py-1">
<div v-if="unfold" class="space-y-1 px-0 py-1">
<!-- key value pair display -->
<div
v-for="(kvp, index) in [
...categorisedValuePairs.primitives,
@@ -249,8 +250,13 @@ const ignoredProps = [
'bbox'
]
const isNameValuePair = computed(() => {
const keys = Object.keys(props.object)
return keys.includes('name') && keys.includes('value')
})
const keyValuePairs = computed(() => {
const kvps = [] as Record<string, unknown>[]
const kvps = [] as (Record<string, unknown> & { key: string })[]
// handle revit paramters
if (props.title === 'parameters') {
@@ -304,9 +310,9 @@ const categorisedValuePairs = computed(() => {
primitives: keyValuePairs.value.filter(
(item) => item.type !== 'object' && item.type !== 'array' && item.value !== null
),
objects: keyValuePairs.value.filter(
(item) => item.type === 'object' && item.value !== null
),
objects: keyValuePairs.value
.filter((item) => item.type === 'object' && item.value !== null)
.sort((a, b) => a.key.toLowerCase().localeCompare(b.key.toLowerCase())),
nonPrimitiveArrays: keyValuePairs.value.filter(
(item) =>
item.type === 'array' &&
@@ -133,7 +133,7 @@ const documents = {
"\n fragment ViewerCommentsListItem on Comment {\n id\n rawText\n archived\n author {\n ...LimitedUserAvatar\n }\n createdAt\n viewedAt\n replies {\n totalCount\n cursor\n items {\n ...ViewerCommentsReplyItem\n }\n }\n replyAuthors(limit: 4) {\n totalCount\n items {\n ...FormUsersSelectItem\n }\n }\n resources {\n resourceId\n resourceType\n }\n }\n": types.ViewerCommentsListItemFragmentDoc,
"\n fragment ViewerModelVersionCardItem on Version {\n id\n message\n referencedObject\n sourceApplication\n createdAt\n previewUrl\n authorUser {\n ...LimitedUserAvatar\n }\n }\n": types.ViewerModelVersionCardItemFragmentDoc,
"\n fragment WorkspaceAvatar_Workspace on Workspace {\n id\n logo\n defaultLogoIndex\n }\n": types.WorkspaceAvatar_WorkspaceFragmentDoc,
"\n fragment WorkspaceInviteDialog_Workspace on Workspace {\n domainBasedMembershipProtectionEnabled\n domains {\n domain\n id\n }\n id\n team {\n items {\n id\n user {\n id\n }\n }\n }\n invitedTeam(filter: $invitesFilter) {\n title\n user {\n id\n }\n }\n }\n": types.WorkspaceInviteDialog_WorkspaceFragmentDoc,
"\n fragment WorkspaceInviteDialog_Workspace on Workspace {\n domainBasedMembershipProtectionEnabled\n domains {\n domain\n id\n }\n id\n team {\n items {\n id\n user {\n id\n role\n }\n }\n }\n invitedTeam(filter: $invitesFilter) {\n title\n user {\n id\n }\n }\n }\n": types.WorkspaceInviteDialog_WorkspaceFragmentDoc,
"\n fragment MoveProjectsDialog_Workspace on Workspace {\n id\n ...ProjectsMoveToWorkspaceDialog_Workspace\n projects {\n items {\n id\n }\n }\n }\n": types.MoveProjectsDialog_WorkspaceFragmentDoc,
"\n fragment MoveProjectsDialog_User on User {\n projects {\n items {\n ...ProjectsMoveToWorkspaceDialog_Project\n role\n workspace {\n id\n }\n }\n }\n }\n": types.MoveProjectsDialog_UserFragmentDoc,
"\n fragment WorkspaceProjectList_ProjectCollection on ProjectCollection {\n totalCount\n items {\n ...ProjectDashboardItem\n }\n cursor\n }\n": types.WorkspaceProjectList_ProjectCollectionFragmentDoc,
@@ -837,7 +837,7 @@ export function graphql(source: "\n fragment WorkspaceAvatar_Workspace on Works
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n fragment WorkspaceInviteDialog_Workspace on Workspace {\n domainBasedMembershipProtectionEnabled\n domains {\n domain\n id\n }\n id\n team {\n items {\n id\n user {\n id\n }\n }\n }\n invitedTeam(filter: $invitesFilter) {\n title\n user {\n id\n }\n }\n }\n"): (typeof documents)["\n fragment WorkspaceInviteDialog_Workspace on Workspace {\n domainBasedMembershipProtectionEnabled\n domains {\n domain\n id\n }\n id\n team {\n items {\n id\n user {\n id\n }\n }\n }\n invitedTeam(filter: $invitesFilter) {\n title\n user {\n id\n }\n }\n }\n"];
export function graphql(source: "\n fragment WorkspaceInviteDialog_Workspace on Workspace {\n domainBasedMembershipProtectionEnabled\n domains {\n domain\n id\n }\n id\n team {\n items {\n id\n user {\n id\n role\n }\n }\n }\n invitedTeam(filter: $invitesFilter) {\n title\n user {\n id\n }\n }\n }\n"): (typeof documents)["\n fragment WorkspaceInviteDialog_Workspace on Workspace {\n domainBasedMembershipProtectionEnabled\n domains {\n domain\n id\n }\n id\n team {\n items {\n id\n user {\n id\n role\n }\n }\n }\n invitedTeam(filter: $invitesFilter) {\n title\n user {\n id\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
File diff suppressed because one or more lines are too long
@@ -201,8 +201,10 @@ export default {
filter.data = rawFilter
const key = rawFilter.key
// Handle revit params (a wee bit of FML moment)
if (key.startsWith('parameters.')) {
if (key.startsWith('parameters.') || key.startsWith('properties.')) {
if (key.endsWith('.value')) {
console.log('pushing', key)
console.log('pushing', key)
// filter.name = this.props[key.replace('.value', '.name')].allValues[0]
const nameProp = this.propertyFilters.find(
(f) => f.key === key.replace('.value', '.name')
@@ -81,6 +81,7 @@ export class SpeckleLoader extends Loader {
Logger.warn('Downloading object ', this._resource)
const pause = new AsyncPause()
for await (const obj of this.loader.getObjectIterator()) {
if (this.isCancelled) {
this.emit(LoaderEvent.LoadCancelled, this._resource)