import { PlatformProvider, Platform } from '@sd/interface';
// Tauri implementation
const tauriPlatform: Platform = {
platform: 'tauri',
openDirectoryPickerDialog: async (opts) => {
return await window.__TAURI__.dialog.open({
directory: true,
title: opts?.title,
multiple: opts?.multiple,
});
},
openFilePickerDialog: async (opts) => {
return await window.__TAURI__.dialog.open({
directory: false,
title: opts?.title,
multiple: opts?.multiple,
});
},
saveFilePickerDialog: async (opts) => {
return await window.__TAURI__.dialog.save({
title: opts?.title,
defaultPath: opts?.defaultPath,
});
},
openLink: (url) => {
window.__TAURI__.shell.open(url);
},
confirm: (message, callback) => {
window.__TAURI__.dialog.confirm(message).then(callback);
},
};
// Web implementation
const webPlatform: Platform = {
platform: 'web',
// No native dialogs
openLink: (url) => {
window.open(url, '_blank');
},
confirm: (message, callback) => {
callback(window.confirm(message));
},
};
function App() {
const platform = window.__TAURI__ ? tauriPlatform : webPlatform;
return (
<PlatformProvider platform={platform}>
<YourApp />
</PlatformProvider>
);
}