Orbito - Dokumentacja modułówOrbito - Dokumentacja modułów
Wprowadzenie
Pierwsze kroki
API
Komunikacja
Widoki
Wdrożenie
Społeczność
For AI agents
Wprowadzenie
Pierwsze kroki
API
Komunikacja
Widoki
Wdrożenie
Społeczność
For AI agents
  • OrbitoViewEngine

    • Wprowadzenie
    • BaseView – Klasa bazowa
    • Zmienne (VarStore)
    • Listy i notacja .$
    • Szablony Handlebars
    • Akcje (ActionHandler)
    • Tabele danych
    • Edycja danych
    • Kontrolki wartości
    • Warianty stylistyczne
    • Komponenty i sloty
    • Pliki, kamera i schemat z serwera
  • Widoki

    • AvatarView
    • BadgeView
    • ButtonView
    • CameraView
    • CardView
    • CheckboxGroupView
    • CheckboxView
    • ComponentView
    • CssBoxView
    • DataTableView
    • DropdownView
    • DynamicListView
    • DynamicView
    • FilePickerView
    • FilePreviewView
    • FlexView
    • GridView
    • HtmlView
    • InlineEditView
    • InputView
    • ListView
    • ModalView
    • PopoverView
    • RadioGroupView
    • RowView
    • SelectView
    • SliderView
    • SlotView
    • StepperView
    • TabsView
    • TextInputView
    • TextView

Pliki, kamera i schemat z serwera

Źródło: FileService.js, FilePreviewView.js, FilePickerView.js, CameraView.js, DynamicView.js, schemaGuard.js

Plik w schemacie opisuje się źródłem, a nie znacznikiem HTML: adresem, treścią tekstową albo base64 z odpowiedzi API. Budową Blob, tymczasowym objectURL i zwolnieniem pamięci zajmuje się FileService. Dozwolone są wyłącznie adresy http(s), blob:, data: i ścieżki względne — javascript: i inne wykonywalne schematy są odrzucane, bo url bywa budowany z danych zwróconych przez backend.

filepreview — podgląd pliku

type: filepreview
id: invoicePreview
title: Faktura
valueFrom: orderDetail.invoice     # obiekt albo string (base64 / adres)
source: base64                     # base64 | text | url — gdy `valueFrom` daje string
mimeType: application/pdf
filename: faktura.pdf
height: 420px
actions: true                      # przyciski Pobierz / Otwórz (domyślnie true)
emptyMessage: Brak pliku
  • Plik można podać wprost: contentBase64, content albo url — sprawdzane w tej kolejności. Gdy valueFrom wskazuje obiekt, widok czyta z niego pola contentBase64 / content / url, mimeType oraz filename (albo name), więc odpowiedź API nie wymaga mapowania.
  • Podgląd dobierany jest do typu: obraz jako img, PDF i pliki tekstowe w izolowanej ramce (sandbox), pozostałe jako karta z nazwą pliku.
  • mimeType bez wartości jest zgadywany z nazwy pliku lub adresu.
  • Przyciski Pobierz i Otwórz uruchamiają akcje downloadFile / openFile; ich podpisy zmienia downloadLabel i openLabel, a actions: false ukrywa cały pasek.
  • Tymczasowy objectURL zbudowany z base64 jest zwalniany przy zmianie pliku i przy odmontowaniu widoku, więc podgląd nie wycieka pamięcią.

filepicker — wybór pliku

type: filepicker
id: attachment
label: Załącznik
accept: image/*,.pdf
maxSize: 5MB
multiple: false
mode: file                         # file | base64
buttonLabel: Wybierz plik
  • Domyślnie wartością kontrolki jest obiekt File (a przy multiple: true tablica File) — dokładnie to, co przyjmuje FormData przy wysyłce.
  • mode: base64 włącza się jawnie, bo base64 powiększa dane o ok. 33%. Wartością jest wtedy deskryptor { name, mimeType, size, contentBase64 }.
  • accept przyjmuje typy MIME i rozszerzenia (image/*, .pdf), a maxSize zapis w rodzaju 5MB, 500kb albo liczbę bajtów. Pliki niepasujące są odrzucane z komunikatem pod kontrolką i nie zostają w polu.
  • Pliku nie da się ustawić programowo (ograniczenie przeglądarki) — setValue(null) czyści zarówno stan, jak i pole.

camera — zdjęcia jako wartość kontrolki

type: camera
id: damagePhotos
label: Zdjęcia uszkodzeń
facingMode: environment            # environment (tylna) | user (przednia)
mimeType: image/jpeg
quality: 0.9
maxPhotos: 5
gallery: true
captureKey: true                   # spacja robi zdjęcie (domyślnie true)
onCapture:
  action: callMethod
  module: core/orders
  method: photo.add
  • Widok pokazuje podgląd z kamery, przycisk zdjęcia i galerię miniatur z możliwością usunięcia pojedynczego zdjęcia.
  • Wartością kontrolki jest tablica zdjęć { name, mimeType, width, height, contentBase64 }, więc wysyła się je zwykłym withData — bez ukrytych pól i skryptów. onCapture widzi w $value nowe zdjęcie, onChange — całą tablicę.
  • Ścieżki mediów są zatrzymywane przy odmontowaniu widoku oraz przy przebudowie zawartości (renderIf, variantIf) — inaczej dioda kamery świeciłaby po zamknięciu modala.
  • Odmowa uprawnień lub brak kamery kończy się czytelnym komunikatem („Brak zgody na dostęp do kamery”, „Nie znaleziono kamery”, „Kamera jest używana przez inną aplikację”) i przyciskiem ponowienia, a nie pustym prostokątem.

schemaFrom — schemat widoku z serwera

type: dynamic
module: core/shipping
method: carrierDropdown
schemaFrom: data.view              # ścieżka do schematu w odpowiedzi API
allow: [html]                      # zgoda na typy wstawiające surowy kod strony
allowActions: [callMethod, reload] # zawężenie listy dozwolonych akcji

Serwer zwraca wtedy opis widoku, a nie gotowy HTML. Zdalny schemat jest danymi z zewnątrz, więc przed renderowaniem przechodzi walidację (schemaGuard.js):

Element schematuPolityka
Typy widokówDozwolone wyłącznie znane typy silnika
html, cssboxWymagają jawnej zgody allow: [html] — wstawiają surowy HTML i CSS
AkcjeDozwolone wyłącznie znane akcje; allowActions dodatkowo zawęża listę
componentsZabronione — rejestr komponentów jest wspólny dla całej strony
actionDefinitionsDozwolone — obowiązują tylko w poddrzewie zwróconego schematu

Nazwane akcje wyszukiwane są w górę drzewa od widoku wywołującego, więc definicja ze zdalnego schematu nie nadpisuje niczego na stronie — inaczej niż rejestracja komponentu, która byłaby globalna (patrz Komponenty i sloty).

Schemat nie może też być dowolnie duży ani zapętlony:

LimitWartość
Maksymalne zagnieżdżenie widoków20
Maksymalna liczba węzłów widoków500
Zbieranych błędów walidacji20 (dalsze nie wnoszą nic do diagnostyki)

Niepoprawny schemat nie jest renderowany: widok pokazuje komunikat (schemaErrorMessage), a lista błędów trafia do konsoli.


Powiązane: Dostępne Akcje (ActionHandler) · Kontrolki wartości · Komponenty i sloty · DynamicView · FilePreviewView

Ostatnio zaktualizowano:: 25.08.2026, 12:56
Contributors: Wiktor Koźmiński
Prev
Komponenty i sloty