31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
from textual import on
|
|
from textual.app import ComposeResult
|
|
from textual.widgets import Select
|
|
|
|
import portfolio
|
|
from tui.record_pane import RecordListPane
|
|
|
|
IMAGE_FOLDERS = {"hackathons": "hacks", "organizations": "organizations", "opensource": "projects"}
|
|
|
|
|
|
class ProjectsPane(RecordListPane):
|
|
def __init__(self, **kwargs):
|
|
super().__init__(portfolio.PROJECT_COLLECTIONS[0], **kwargs)
|
|
|
|
def compose_header(self) -> ComposeResult:
|
|
options = [(collection.title, collection.id) for collection in portfolio.PROJECT_COLLECTIONS]
|
|
yield Select(options, value=self.collection.id, allow_blank=False, id="category-select")
|
|
|
|
@on(Select.Changed, "#category-select")
|
|
def category_changed(self, event: Select.Changed):
|
|
if event.value == self.collection.id:
|
|
return
|
|
self.collection = portfolio.find_collection(str(event.value))
|
|
self.set_content_file(self.collection.file)
|
|
self.build_columns()
|
|
self.reload()
|
|
self.table().focus()
|
|
|
|
def image_folder(self) -> str:
|
|
return IMAGE_FOLDERS.get(self.collection.id, "")
|