|
@@ -1,63 +1,222 @@
|
|
|
<template>
|
|
|
- <div class="row items-baseline">
|
|
|
- <div class="col-xs-grow col-sm-auto q-px-sm">
|
|
|
- <q-table
|
|
|
- title="Activated materials"
|
|
|
- title-class="text-h6"
|
|
|
- :rows="rowsQ"
|
|
|
- :columns="columnsQ"
|
|
|
- hide-bottom
|
|
|
+ <div class="q-pa-md">
|
|
|
+
|
|
|
+ <q-table
|
|
|
+ :rows="rows"
|
|
|
+ :columns="columns"
|
|
|
+ :filter="filter"
|
|
|
+ :loading="loading"
|
|
|
+ :rows-per-page-options="[3, 12, 24, 0]"
|
|
|
dense
|
|
|
- flat
|
|
|
- row-key="name"
|
|
|
+ title="Available materials"
|
|
|
+ title-class="text-h6"
|
|
|
+ row-key="id"
|
|
|
>
|
|
|
- <template #body="props">
|
|
|
- <q-tr :props="props">
|
|
|
- <q-th key="name" :props="props">
|
|
|
- {{ props.row.name }}
|
|
|
- </q-th>
|
|
|
- <template v-for="(val, index) in props.row" :key="index" :props="props">
|
|
|
- <q-td v-if="index!='name'">
|
|
|
- <q-checkbox
|
|
|
- v-model="props.row[index]"
|
|
|
- dense
|
|
|
- />
|
|
|
- </q-td>
|
|
|
+
|
|
|
+ <template #top>
|
|
|
+ <div>
|
|
|
+ <q-tooltip anchor="top end" self="center middle" >
|
|
|
+ Using a copy of RefractiveIndex.info. Analytical models are not implemented.
|
|
|
+ </q-tooltip>
|
|
|
+
|
|
|
+ <q-icon size='sm' name="o_info" />
|
|
|
+ </div>
|
|
|
+ <q-input v-model="filter" dense debounce="300" color="primary" >
|
|
|
+ <template #append>
|
|
|
+ <q-icon name="search" />
|
|
|
+ </template>
|
|
|
+ <template v-if="filter" #after>
|
|
|
+ <q-btn flat round dense icon="cancel" @click="filter=''"/>
|
|
|
</template>
|
|
|
- </q-tr>
|
|
|
+
|
|
|
+ </q-input>
|
|
|
+ <q-space />
|
|
|
</template>
|
|
|
+
|
|
|
+ <template #header="props">
|
|
|
+ <q-tr :props="props">
|
|
|
+ <q-th auto-width />
|
|
|
+ <q-th class="text-left"> {{ props.cols[1].label }} </q-th>
|
|
|
+ <q-th class="text-left"> {{ props.cols[2].label }} </q-th>
|
|
|
+ <q-th class="text-left"> {{ props.cols[3].label }} </q-th>
|
|
|
+ </q-tr>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template #body="props">
|
|
|
+ <q-tr :props="props">
|
|
|
+ <q-td auto-width>
|
|
|
+ <q-tooltip anchor="top end" self="center middle" >
|
|
|
+ Add to simulation</q-tooltip>
|
|
|
+ <q-btn size="sm" color="accent" round dense icon="add" @click="addToSimulation(props.row.id)"/>
|
|
|
+<!-- <q-btn size="sm" color="accent" round dense @click="props.expand = !props.expand" :icon="props.expand ? 'remove' : 'add'" />-->
|
|
|
+ </q-td>
|
|
|
+ <q-td auto-width> {{ props.row.bookDivider }} </q-td>
|
|
|
+ <q-td auto-width>
|
|
|
+ <!-- eslint-disable-next-line vue/no-v-html -->
|
|
|
+ <div v-html="props.row.bookName"/>
|
|
|
+ <q-tooltip anchor="top middle" self="center middle" >
|
|
|
+ {{ props.row.shelfDivider }}</q-tooltip>
|
|
|
+ </q-td>
|
|
|
+ <q-td> {{ props.row.pageName }} </q-td>
|
|
|
+ </q-tr>
|
|
|
+ </template>
|
|
|
+
|
|
|
+ <template #pagination="scope">
|
|
|
+ <q-btn
|
|
|
+ v-if="scope.pagesNumber > 2"
|
|
|
+ icon="first_page"
|
|
|
+ color="grey-8"
|
|
|
+ round
|
|
|
+ dense
|
|
|
+ flat
|
|
|
+ :disable="scope.isFirstPage"
|
|
|
+ @click="scope.firstPage"
|
|
|
+ />
|
|
|
+
|
|
|
+ <q-btn
|
|
|
+ icon="chevron_left"
|
|
|
+ color="grey-8"
|
|
|
+ round
|
|
|
+ dense
|
|
|
+ flat
|
|
|
+ :disable="scope.isFirstPage"
|
|
|
+ @click="scope.prevPage"
|
|
|
+ />
|
|
|
+ {{scope.pagination.page}} of {{scope.pagesNumber}}
|
|
|
+
|
|
|
+ <q-btn
|
|
|
+ icon="chevron_right"
|
|
|
+ color="grey-8"
|
|
|
+ round
|
|
|
+ dense
|
|
|
+ flat
|
|
|
+ :disable="scope.isLastPage"
|
|
|
+ @click="scope.nextPage"
|
|
|
+ />
|
|
|
+
|
|
|
+ <q-btn
|
|
|
+ v-if="scope.pagesNumber > 2"
|
|
|
+ icon="last_page"
|
|
|
+ color="grey-8"
|
|
|
+ round
|
|
|
+ dense
|
|
|
+ flat
|
|
|
+ :disable="scope.isLastPage"
|
|
|
+ @click="scope.lastPage"
|
|
|
+ />
|
|
|
+ </template>
|
|
|
+
|
|
|
</q-table>
|
|
|
- </div>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts">
|
|
|
import {
|
|
|
+ // computed,
|
|
|
defineComponent,
|
|
|
- computed,
|
|
|
- } from 'vue'
|
|
|
-import { useStore } from 'src/store'
|
|
|
+ reactive,
|
|
|
+ ref
|
|
|
+} from 'vue'
|
|
|
+// import { useStore } from 'src/store'
|
|
|
+import { load } from 'js-yaml'
|
|
|
|
|
|
export default defineComponent({
|
|
|
|
|
|
name: 'MaterialsSelector',
|
|
|
components: {},
|
|
|
|
|
|
- setup() {
|
|
|
- const $store = useStore()
|
|
|
-
|
|
|
- const activatedMaterials = computed(() => $store.state.guiRuntime.activatedMaterials)
|
|
|
- const columnsQ = computed(()=>{
|
|
|
- return [
|
|
|
- { name: 'name', label: '', align: 'left', field: 'name', headerStyle:''},
|
|
|
- { name: 'Qsca', label: 'Qsca', align: 'left', field: 'Qsca', headerStyle:''},
|
|
|
- { name: 'Qabs', label: 'Qabs', align: 'left', field: 'Qabs', headerStyle:''},
|
|
|
- { name: 'Qext', label: 'Qext', align: 'left', field: 'Qext', headerStyle:''},
|
|
|
- ]
|
|
|
+ setup: function () {
|
|
|
+ // const $store = useStore()
|
|
|
+ const loading = ref(true)
|
|
|
+
|
|
|
+ const columns = [
|
|
|
+ // do not change the order without updating the template
|
|
|
+ {name: 'id', label: '', field: 'id'},
|
|
|
+ {name: 'bookDivider', label: 'State', field: 'bookDivider'},
|
|
|
+ {name: 'bookName', label: 'Material', field: 'bookName'},
|
|
|
+ {name: 'pageName', label: 'Authors', field: 'pageName'},
|
|
|
+ {name: 'shelfDivider', label: 'Group', field: 'shelfDivider'},
|
|
|
+ {name: 'pageData', label: 'file', field: 'pageData'},
|
|
|
+ ]
|
|
|
+
|
|
|
+ async function GetPagesFromLib() { /* eslint-disable */
|
|
|
+ let rows = []
|
|
|
+ // lib has an irregular structure
|
|
|
+ const response = await fetch('refractiveindex.info-database/database/library.yml')
|
|
|
+ const data = await response.text()
|
|
|
+ const lib = await load(data) as any
|
|
|
+ let i = 1
|
|
|
+ for (const shelf of lib) {
|
|
|
+ let shelfDivider = ''
|
|
|
+ let bookName = ''
|
|
|
+ for (const bookOrDivider of shelf.content) {
|
|
|
+ if (bookOrDivider.DIVIDER) {
|
|
|
+ shelfDivider = bookOrDivider.DIVIDER
|
|
|
+ continue
|
|
|
+ } else if (bookOrDivider.name) {
|
|
|
+
|
|
|
+ bookName = bookOrDivider.name
|
|
|
+ let bookDivider = ''
|
|
|
+ let pageName = ''
|
|
|
+ let pageData = ''
|
|
|
+ for (const pageOrDivider of bookOrDivider.content) {
|
|
|
+ if (pageOrDivider.DIVIDER) {
|
|
|
+ bookDivider = pageOrDivider.DIVIDER
|
|
|
+ continue
|
|
|
+ } else if (pageOrDivider.name) {
|
|
|
+ pageName = pageOrDivider.name
|
|
|
+ pageData = pageOrDivider.data
|
|
|
+ if (bookDivider.includes('Model') || bookDivider.includes('model')
|
|
|
+ || pageName.includes('Model') || pageName.includes('model')) continue
|
|
|
+
|
|
|
+ rows.push({ id: i,
|
|
|
+ shelfDivider: shelfDivider, bookName: bookName,
|
|
|
+ bookDivider: bookDivider, pageName: pageName, pageData: pageData
|
|
|
+ })
|
|
|
+ i = i + 1
|
|
|
+ // console.log (shelfDivider, '==', bookName, '==',bookDivider, '==', pageName, '==', pageData)
|
|
|
+ // console.log (shelfDivider, '==', bookName, '==',bookDivider, '==', pageName, '==', pageData)
|
|
|
+ } else {
|
|
|
+ console.log('###################### Unknown type in pageOrDivider', pageOrDivider)
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ console.log('###################### Unknown type in bookOrDivider', bookOrDivider)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return rows
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ let rowsProto:{
|
|
|
+ shelfDivider: string, bookName: string,
|
|
|
+ bookDivider: string, pageName: string, pageData: string
|
|
|
+ }[] = []
|
|
|
+ const rows= reactive(rowsProto)
|
|
|
+ GetPagesFromLib().then(val => {
|
|
|
+ rows.push(...val);
|
|
|
+ loading.value = false
|
|
|
})
|
|
|
|
|
|
+ // const activatedMaterials = computed(() => $store.state.guiRuntime.activatedMaterials)
|
|
|
+ // const columnsQ = computed(()=>{
|
|
|
+ // return [
|
|
|
+ // { name: 'name', label: '', align: 'left', field: 'name', headerStyle:''},
|
|
|
+ // { name: 'Qsca', label: 'Qsca', align: 'left', field: 'Qsca', headerStyle:''},
|
|
|
+ // { name: 'Qabs', label: 'Qabs', align: 'left', field: 'Qabs', headerStyle:''},
|
|
|
+ // { name: 'Qext', label: 'Qext', align: 'left', field: 'Qext', headerStyle:''},
|
|
|
+ // ]
|
|
|
+ // })
|
|
|
+
|
|
|
|
|
|
- return { }
|
|
|
+ const filter = ref('')
|
|
|
+ return {columns, rows, loading, filter,
|
|
|
+ addToSimulation(val:number) {
|
|
|
+ console.log(rows[val-1])
|
|
|
+ }}
|
|
|
},
|
|
|
})
|
|
|
</script>
|
|
|
+e
|