Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Internal components refactor [g3w-client #574] #787

Merged
merged 39 commits into from
Apr 22, 2024
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
3060b4d
move shorten condition at top (if-else)
Raruto Mar 22, 2024
a3d3a95
ternary assignment
Raruto Mar 22, 2024
3036aa3
alias: `field['input']` → `input`
Raruto Mar 22, 2024
7599972
reduce nesting
Raruto Mar 22, 2024
c73b3b7
keep a focus on JSON response structure
Raruto Mar 22, 2024
064b5b1
comments
Raruto Mar 22, 2024
34029df
spacing
Raruto Mar 22, 2024
3825718
client https://github.com/g3w-suite/g3w-client/commit/5bbe9ca5eecacaa…
Raruto Mar 22, 2024
68def35
`widget_serializzer_data` → `w_data`
Raruto Mar 22, 2024
aa3315e
client https://github.com/g3w-suite/g3w-client/commit/c08802c848d9126…
Raruto Mar 22, 2024
83f901a
fix `search_1n`
Raruto Mar 26, 2024
08f7c26
TODO
Raruto Mar 26, 2024
1ed010c
:sparkles: Client
volterra79 Mar 29, 2024
173c77a
https://github.com/g3w-suite/g3w-client/pull/574/commits/b83cdad49592…
Raruto Apr 4, 2024
9072e7a
https://github.com/g3w-suite/g3w-client/commit/f797285ff2ba7f39f41ec4…
Raruto Apr 5, 2024
4df32a2
Merge branch 'dev' into g3w-client_PR574
Raruto Apr 8, 2024
c7d8d2e
move `layerid` into `WidgetSerializer`
Raruto Apr 8, 2024
608afa2
:bug: Client
volterra79 Apr 8, 2024
e982824
Merge branch 'g3w-client_PR574' of https://github.com/g3w-suite/g3w-a…
Raruto Apr 8, 2024
2ff8007
https://github.com/g3w-suite/g3w-client/pull/574/commits/28435f298bb9…
Raruto Apr 8, 2024
806b22f
deprecate `G3W_CLIENT_SEARCH_ENDPOINT`
Raruto Apr 9, 2024
0e3b1b5
https://github.com/g3w-suite/g3w-client/pull/574/commits/ea6e5acb587e…
Raruto Apr 9, 2024
d08b881
attempt to fix client test
Raruto Apr 9, 2024
b8e50a6
Merge branch 'dev' into g3w-client_PR574
Raruto Apr 9, 2024
7583581
Merge branch 'dev' into g3w-client_PR574
Raruto Apr 9, 2024
bde258a
:bug: Client
volterra79 Apr 10, 2024
8896efa
remove initial `values` in within search config
Raruto Apr 12, 2024
3995b57
https://github.com/g3w-suite/g3w-client/pull/574
Raruto Apr 12, 2024
f25fb2d
tests
Raruto Apr 12, 2024
acdde5c
`blanktext` → `description`
Raruto Apr 12, 2024
19af84b
https://github.com/g3w-suite/g3w-client/pull/574/commits/1f3a8d9e6917…
Raruto Apr 12, 2024
a58921f
:bug: Client
volterra79 Apr 15, 2024
3508711
Merge branch 'dev' into g3w-client_PR574
Raruto Apr 15, 2024
e27e5d5
https://github.com/g3w-suite/g3w-client/pull/574/commits/e108bcd22e02…
Raruto Apr 15, 2024
1c24b69
https://github.com/g3w-suite/g3w-client/pull/574/commits/9618ec25757f…
Raruto Apr 18, 2024
469eebe
Merge branch 'dev' into g3w-client_PR574
Raruto Apr 18, 2024
3541771
:sparkles: Client
volterra79 Apr 19, 2024
226cfc9
Merge branch 'g3w-client_PR574' of https://github.com/g3w-suite/g3w-a…
volterra79 Apr 19, 2024
45732f2
Merge branch 'dev' into g3w-client_PR574
Raruto Apr 22, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions g3w-admin/base/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,8 @@
CLIENT_DEFAULT = 'client'
CLIENT_G3WSUITE_LOGO = 'g3wsuite_logo_h40.png'
CLIENT_OWS_METHOD = 'GET'

# TODO: set qgis 'api' as default search endpoint?
G3W_CLIENT_SEARCH_ENDPOINT = 'ows' #or 'api' for to use api layer vector with FieldFilterBackend
Raruto marked this conversation as resolved.
Show resolved Hide resolved

# If True not show empty layer into toc and main map
Expand Down
2 changes: 1 addition & 1 deletion g3w-admin/client/static/client/js/app.min.js

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions g3w-admin/client/static/client/js/app.min.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion g3w-admin/client/static/client/js/vendor.min.js

Large diffs are not rendered by default.

113 changes: 50 additions & 63 deletions g3w-admin/qdjango/api/projects/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -495,19 +495,16 @@ def readLeaf(layer, container):
else:
ret['layers'].append(layer_serialized_data)

# get widgects for layer
# get widgets for layer
widgets = layers[layer['id']].widget_set.all()
for widget in widgets:
widget_serializzer_data = WidgetSerializer(
widget, layer=layers[layer['id']]).data
if widget_serializzer_data['type'] in ('search', 'search_1n'):
widget_serializzer_data['options']['layerid'] = layer['id']
widget_serializzer_data['options']['querylayerid'] = layer['id']

ret['search'].append(widget_serializzer_data)
w_data = WidgetSerializer(widget, layer=layers[layer['id']]).data
if w_data['type'] in ('search', 'search_1n'):
w_data['options']['layerid'] = layer['id']
w_data['options']['querylayerid'] = layer['id']
ret['search'].append(w_data)
else:
load_qdjango_widget_layer.send(
self, layer=layer, ret=ret, widget=widget)
load_qdjango_widget_layer.send(self, layer=layer, ret=ret, widget=widget)

for l in ret['layerstree']:
try:
Expand Down Expand Up @@ -930,73 +927,63 @@ def __init__(self, instance=None, data=empty, **kwargs):

def to_representation(self, instance):
ret = super(WidgetSerializer, self).to_representation(instance)
ret['type'] = instance.widget_type

body = json.loads(instance.body)

# get edittype
edittypes = eval(self.layer.edittypes)

if ret['type'] == 'search':
body = json.loads(instance.body)
has_relations = 'search' == instance.widget_type and '' != body.get('relations', '')

# rewrite type ('search' → 'search_1n' if has relations)
ret['type'] = 'search_1n' if has_relations else instance.widget_type

# check if field has a widget edit type
def etype(field, key, default=None):
return edittypes.get(field['name'], {}).get(key, default)

if ret['type'] not in ('search', 'search_1n'):
ret['body'] = body

# TODO: reduce nesting level (there are too many things called 'options')
else:
ret['options'] = {
'queryurl': None,
'title': body['title'],
'results': body['results'],
'filter': [],
'dozoomtoextent': body['dozoomtoextent'],
# 'zoom': body['zoom']
}

# other layers
if 'otherlayers' in body:
ret['options'].update({
'otherquerylayerids': body['otherlayers']
})

for field in body['fields']:

# if widgettype is selectbox, get values
if 'widgettype' in field and field['widgettype'] == 'selectbox':

field['input']['type'] = 'selectfield'
field['input']['options']['values'] = []

edittype = edittypes[field['name']]

# check if field has a widget edit type
widget_type = edittype['widgetv2type']
if field['name'] in edittypes and widget_type in ('ValueMap', 'ValueRelation'):
if widget_type == 'ValueMap':
field['input']['options']['values'] = edittype['values']
else:

# Add layer params
field['input']['options']['key'] = edittype['Value']
field['input']['options']['value'] = edittype['Key']
field['input']['options']['layer_id'] = edittype['Layer']

# For AutoccOmpleteBox input type
if 'widgettype' in field and field['widgettype'] == 'autocompletebox':
field['input']['type'] = 'autocompletefield'

input = field['input']
input['options']['blanktext'] = field['blanktext']
ret['options']['filter'].append({
# other layers
'otherquerylayerids': body.get('otherlayers', []),
# search inputs
'filter': [{
'op': field['filterop'],
'attribute': field['name'],
'label': field['label'],
'input': input,
'logicop': field.get('logicop', 'AND').upper()
})

# rewrite type if relations is set relations
if 'relations' in body and body['relations'] != '':
ret['type'] = 'search_1n'
ret['options']['search_1n_relationid'] = body['relations']
del(body['relations'])
'logicop': field.get('logicop', 'AND').upper(),
'input': {
**field['input'],
'widget_type': etype(field, 'widgetv2type'),
'type': ({
'autocompletebox': 'autocompletefield',
'selectbox': 'selectfield'
}).get(field.get('widgettype'), field['input'].get('type')),
Copy link
Contributor Author

@Raruto Raruto Mar 25, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@wlorenzetti the numberfield type should also be returned in here (currently not implement in v3.7 response):

OK: "Volume greater than" appears as number field

image

KO: "Volume greater than" appears as text field

image

Sample config: "Type and volume"

image

'options': {
**field['input'].get('options', {}),
'values': etype(field, 'values', []),
'blanktext': field.get('blanktext', ''),
# ValueRelation → add layer params
**({
'key' : etype(field, 'Value'),
'value': etype(field, 'Key'),
'layer_id': etype(field, 'Layer'),
} if 'ValueRelation' == etype(field, 'widgetv2type') else {}),
},
},
} for field in body['fields']],
# relation id
**({ 'search_1n_relationid': body['relations'] } if has_relations else {})
}

else:
ret['body'] = json.loads(instance.body)
return ret

class Meta:
Expand Down
Loading