feat(fe2): re-adds syntatic sugar for new properties coming out of revit & sorts selection props alphabetically
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user